1. ホーム
  2. c++

[解決済み] 関数宣言の中の`*&`はどういう意味ですか?

2022-03-05 06:38:47

質問

以下のような関数を書きました。

void myFunc(myStruct *&out) {
    out = new myStruct;
    out->field1 = 1;
    out->field2 = 2;
}

さて、呼び出し側の関数では、次のような書き方をするかもしれない。

myStruct *data;
myFunc(data);

のすべてのフィールドを埋めることになります。 data . もし、' & を宣言した場合、これは動作しません。(というか、関数内では局所的にしか動作しませんが、呼び出し元では何も変わりません)

どなたか、この' *& は実際に何をしているのでしょうか?見た目が変で、あまり意味がわかりません。

どのように解決するのですか?

C++の変数宣言にある&という記号は、その変数が 参照 .

呼び出された関数は、ポインタへの参照を持っているので、呼び出し側のコンテキストでポインタを変更することができます。

つまり、繰り返しになりますが、ここでのquot;操作記号"は *& この組み合わせは、それ自体には大きな意味はない。その * は型の一部である myStruct * へのポインタである。 myStruct "であり & は参照になるので、「"」と読みます。 out へのポインタへの参照です。 myStruct "です。

元のプログラマーは、次のように書けば助かったと私は思う。

void myFunc(myStruct * &out)

あるいは、(私の個人的なスタイルではありませんが、もちろんまだ有効です)。

void myFunc(myStruct* &out)

もちろん、スタイルについては他にもいろいろな意見がありますよ :)