- ベストアンサー
関数宣言時の引数の*&はどういう意味なのでしょうか?
void Func(TestClass*& test){ … } というような記述を見かけたのですが、TestClassの後ろについている *&はどういう意味なのでしょうか? どういう理由があってつけられているのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
まず参照渡しについてはわかっているでしょうか? これはTestClass*の参照渡しです。 void Func(int*& test) { test = new int; } int main() { int* p; Func(p); *p = 10; return 0; } こうすればFunc内部で、pをnewしています。 もし void Func(int* test) { test = new int; } なら pにnewされたアドレスは反映されません。 以下のコードでpとtestが同じ値であることが確認できます 「*&」を「*」に書き換えるとtestとpが違う値になるでしょう。 #include <iostream> void Func(int*& test) { test = new int; std::cout << test << std::endl; } int main() { int* p = NULL; Func(p); std::cout << p << std::endl; return 0; }
その他の回答 (1)
- mikaemi
- ベストアンサー率50% (33/65)
TestClass へのポインタのリファレンスですよね。 ポインタの値(ポインタが指しているものではなく、ポインタの値そのもの)を Func 内で書き換えて戻したいのではないですか? void Func(TestClass **ptest) { *ptest = 0; } void Func(TestClass *&test) { test = 0; } とか。
お礼
ポインタのポインタのC++版だったのですね!ありがとうございます。 すっきりしました。
お礼
なるほど!ありがとうございます。*&という記述は、 以下のように、ポインタを、参照宣言された引数に渡す際に、 わざわざポインタはずしをしなくてすむような便宜なのだと勘違いしておりました。 #include <iostream> void Func(int& intRef){ intRef = 3; } int main(void){ int* p = NULL; //ポインタを参照に変えなくちゃいけないのでポインタはずし Func(*p); std::cout << *p << std::endl; }