[解決済み] C++で「int& foo()」は何を意味するのか?
2022-09-04 16:38:30
質問
読書中 この説明 を読んでいるとき、これらのコードの行が私の心に残りました。
int& foo();
foo() = 42; // OK, foo() is an lvalue
g++で試してみましたが、コンパイラは"undefined reference to foo()"と表示されます。もし、私が
int foo()
{
return 2;
}
int main()
{
int& foo();
foo() = 42;
}
コンパイルはうまくいくのですが、実行すると セグメンテーションエラー . ただ、この行
int& foo();
はそれ自体で、何の問題もなくコンパイルと実行ができます。
このコードは何を意味するのでしょうか?関数呼び出しに値を割り当てることができますが、なぜrvalueでないのでしょうか?
どのように解決するのですか?
について、何らかの合理的な実装があることを前提に説明しています。
foo
への lvalue の参照を返す、妥当な
int
.
このような実装が考えられます。
int a = 2; //global variable, lives until program termination
int& foo() {
return a;
}
さて、このように
foo
はlvalueの参照を返すので、次のように戻り値に何かを代入することができます。
foo() = 42;
これは、グローバルな
a
を値
42
という変数があり、この変数に直接アクセスするか、あるいは
foo
を再度呼び出すことで確認できます。
int main() {
foo() = 42;
std::cout << a; //prints 42
std::cout << foo(); //also prints 42
}
関連
-
[解決済み】coutはstdのメンバではない
-
[解決済み】'std::cout'への未定義の参照
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] callとapplyの違いは何ですか?
-
[解決済み] ルール・オブ・スリーとは?
-
[解決済み] JavaScriptの変数のスコープとは何ですか?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み】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++エラー。アーキテクチャ x86_64 に対して未定義のシンボル
-
[解決済み】構造体のベクター初期化について
-
[解決済み】非静的メンバ関数への参照を呼び出す必要がある
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み】Cygwin Make bash コマンドが見つかりません。
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み】C++の余分な資格エラー
-
[解決済み】 while(cin) と while(cin >> num) の違いは何ですか?)
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み】変数やフィールドがvoid宣言されている