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

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-06 14:20:131024ブラウズ

Why Can't Non-Const Lvalue References Bind to Temporaries in C  ?

非 const 左辺値参照と一時バインディング

C では、非 const 左辺値参照は、同じ左辺値または左辺値にバインドされることが期待されます。派生型。ただし、一時オブジェクトへのバインドなど、特定の状況ではエラーが発生する可能性があります。

次のコードはなぜ有効ですか?

int a;
const double &m = a;

この場合、参照は左辺値にバインドされています。 、参照は const であるため、lvalue は変更できません。これは、型に互換性がある限り、C では許可されます。

ただし、非 const 左辺値参照を別の型の左辺値にバインドしようとすると、エラーが発生します:

int a;
double &m = a;

エラー: 型 'double' への非定数左辺値参照は、無関係な型 'int' の値にバインドできません

このエラーは、一時的な変数が存在するために発生します。 関与した。 int から double への暗黙的な型変換により、一時オブジェクトが作成されます。非定数参照は、オブジェクトの有効期間と場所が既知である必要があるため、一時オブジェクトにバインドできません。一時オブジェクトは、その性質上、限られた期間のみ存在します。

特定の場合に一時オブジェクトへのバインドを許可するコンパイラ拡張機能により、Visual Studio はこのコードをエラーなしでコンパイルできます。ただし、GCC などのコンパイラは、このエラーに正しくフラグを立てます。

以下の例は、ユーザー定義型に関する同様の問題を示しています。

struct Foo {};

Foo &obj = Foo(); // error: binding non-const reference to temporary

C で適切な参照を処理するには、この概念を理解することが重要です。オブジェクトの有効期間に関連する実行時の問題を回避します。

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

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