ホームページ > バックエンド開発 > C++ > C で一時オブジェクトをバインドするために非 Const 参照を使用できないのはなぜですか?

C で一時オブジェクトをバインドするために非 Const 参照を使用できないのはなぜですか?

Mary-Kate Olsen
リリース: 2024-12-25 03:26:27
オリジナル
710 人が閲覧しました

Why Can't I Use a Non-Const Reference to Bind a Temporary Object in C  ?

なぜ一時オブジェクトへの非 const 参照を使用しないのですか?

C では、式中に作成された一時オブジェクトは const 参照にのみ割り当てられますが、非 const には割り当てられません。参考文献。このため、この制限の背後にある理論的根拠について疑問が生じています。

従来の説明は、一時オブジェクトを変更することによる潜在的な危険性に基づいています。一時オブジェクトへの非 const 参照が許可されている場合、それが意図せずに変更され、予期しない結果が生じる可能性があります。ただし、批評家は、一時オブジェクトからの読み取りも同様に危険であり、制限する必要があると主張しています。

この違いを理解するには、次の例を考えてください。

String& a = String("test");         // Error
const String& a = String("test");   // Ok
ログイン後にコピー

最初の行はエラーです。 2 行目は有効です。これは、C が一時オブジェクトからの読み取りを考慮していないことを示唆しています。では、なぜ書き込みが禁止されているのでしょうか?

その答えは C の基本的な側面、つまり関数のパラメーターにあります。一時オブジェクトへの非 const 参照が許可されると、参照を受け入れる関数に一時オブジェクトを渡すときにあいまいさが生じます。例:

void inc(double& x)
{
    x += 0.1;
}

int i = 0;
inc(i);
ログイン後にコピー

この例では、i が inc() に渡されるとき、i への参照が意図されているのか、それとも i の一時コピーを作成する必要があるのか​​が不明瞭です。このあいまいさにより、微妙なエラーが発生する可能性があります。

一時変数への非定数参照を禁止することで、C では関数パラメータが常に左辺値 (非一時オブジェクト) を参照するようになります。これにより、混乱の可能性が排除され、コードが明確になります。

以上がC で一時オブジェクトをバインドするために非 Const 参照を使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート