非 const 参照のバインド制限
C では、 const 参照は、同じ型と無関係な型の両方の lvalue にバインドできます。ただし、非 const 参照は、左辺値にバインドするときに追加の制限に直面します。
無関係な左辺値バインディングの失敗
次のコードを検討してください:
int a; double &m = a; // error: non-const lvalue reference to type 'double' cannot bind to a value of unrelated type 'int'
ここでは、非定数参照 m を int 型の左辺値にバインドしようとしています。非定数参照は関連のない左辺値にバインドできないため、これは失敗します。
一時オブジェクト バインディングの禁止
非定数参照も一時オブジェクトにバインドできません。例:
double &m = a; // compilation error: temporary bound to non-const reference
この場合、a を m に代入するには、int を double に変換し、一時オブジェクトを作成する必要があります。非定数参照は、そのような一時オブジェクトにバインドできません。
この制限の背後にある理論的根拠は、非定数参照には元のオブジェクトのアドレスへのアクセスが必要ですが、一時オブジェクトは使用後すぐに破棄されるため、これは不可能です。 .
Visual Studio Compiler Extension
重要な注意点Visual Studio では、特定の場合に一時オブジェクトへのバインドを許可するコンパイラ拡張機能が原因で、このエラーが発生しない可能性があります。ただし、GCC などの他のコンパイラは、拘束力のないルールを厳密に適用します。
以上がC で非 Const 参照を関連のない左辺値または一時値にバインドできないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。