[解決済み] 関数宣言の中の`*&`はどういう意味ですか?
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)
もちろん、スタイルについては他にもいろいろな意見がありますよ :)
関連
-
[解決済み】LLVMで暗黙のうちに削除されたコピーコンストラクタの呼び出し
-
[解決済み】C++の余分な資格エラー
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] ルール・オブ・スリーとは?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] C++11のT&&(ダブルアンパサンド)の意味とは?
-
[解決済み] ポインタの「デリファレンス」とはどういう意味ですか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] テスト
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み】LLVMで暗黙のうちに削除されたコピーコンストラクタの呼び出し
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み】'cout'は型名ではない
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み】「Expected '(' for function-style cast or type construction」エラーの意味とは?
-
[解決済み】C++の余分な資格エラー
-
[解決済み】システムが指定されたファイルを見つけられませんでした。