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 サイトの他の関連記事を参照してください。