1. ホーム
  2. c++

[解決済み] 非 const lvalue の参照

2022-02-25 13:49:43

質問

なぜ、こんなことができるのか

int a;
const double &m = a;

しかし、これを実行すると

int a;
double &m = a;

エラーが発生しましたか?

error: non-const lvalue reference to type 'double' cannot bind to a value of unrelated type 'int'

編集する

より具体的に言うと、非恒等式参照がtempオブジェクトをバインドできない理由を理解しようとしているのです。

解決方法は?

それは、テンポラリは非恒等式参照にバインドできないからです。

double &m = a;

a は、タイプ int に変換されています。 double . つまり、テンポラリーが作成されるわけです。ユーザー定義型も同様です。

Foo &obj = Foo(); // You will see the same error message.

しかし、Visual Studioでは、デフォルトで有効になっているコンパイラ拡張のため、問題なく動作します。しかし、GCCでは文句を言われます。