ホームページ >バックエンド開発 >C++ >C で非 Const 左辺値参照を別の型の左辺値にバインドできないのはなぜですか?

C で非 Const 左辺値参照を別の型の左辺値にバインドできないのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-25 19:23:14954ブラウズ

Why Can't a Non-Const Lvalue Reference Bind to an Lvalue of a Different Type in C  ?

左辺値参照バインディング エラー

C では、参照はデータに間接的にアクセスするメカニズムを提供します。ただし、参照を左辺値 (メモリ位置に格納されているオブジェクト) にバインドする場合は、特定の制限が適用されます。これらの制限を理解することは、コードを正しく効率的に行うために非常に重要です。

このような制限の 1 つは、非 const 左辺値参照を別の型の左辺値にバインドしようとするときに発生します。たとえば、次のコード スニペットは有効です:

int a;
const double &m = a;

ここで、m のデータ型は a のデータ型よりも広いため、const double 参照 m は int lvalue a にバインドできます。ただし、次のことを実行しようとすると、

int a;
double &m = a;

エラーが発生します。「型 'double' への非 const 左辺値参照は、無関係な型 'int' の値にバインドできません。」このエラーは、非 const 左辺値参照が一時オブジェクトにバインドできないという事実に起因します。

2 番目のコード スニペットでは、左辺値 a が double 型に変換されています。この変換により、一時オブジェクトが作成されます。ただし、m のような非 const 左辺値参照は、この一時オブジェクトにバインドできません。

この制限は、ユーザー定義型にも同様に適用されます。

struct Foo {};

Foo &obj = Foo(); // Error: non-const reference cannot bind to temporary object

Visual Studio などの一部のコンパイラでは、デフォルトのコンパイラ拡張機能が原因でエラーが表示されない場合があります。ただし、GCC などの準拠コンパイラではこのエラーが発生します。したがって、コードの正確性を確保し、潜在的な問題を回避するには、これらのルールに従うことが重要です。

以上がC で非 Const 左辺値参照を別の型の左辺値にバインドできないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。