リテラルは一定だからです。1 は 2 に"abd"
なれないし、 にもなれない"edf"
。
C++ で非const
参照によるリテラルの取得が許可されている場合、次のいずれかになります。
- リテラルの意味を動的に変更できるようにして、1 を 2 にできるようにする必要があります。
- プログラマーは、リテラルを参照しない参照を介してのみ値を変更し、間違った場合は未定義の動作を呼び出すように細心の注意を払う必要があります。
x == 1
(1)コンテキストによっては「x は 2 に等しい」という意味になる可能性があるため、プログラムに混乱が生じます。また、(2)void display(int& a)
リテラル参照を受け取るかどうかをどのように知る必要があるため、達成することは不可能ですか?
これら 2 つのオプションはどちらも意味がないため、リテラルはconst
参照によってのみ渡すことができます。
実際、非推奨となった文字列リテラルから への変換char*
は、参照ではなくポインタではありますが、ルールが非常に理にかなっている理由の良い例です。char*
を にポイントさせることはできますが"abc"
、 の「変更可能性」属性を実際に利用しchar*
て要素の 1 つを変更しようとするとchar
、未定義の動作が発生します。これにより、非推奨の変換全体が危険で役に立たなくなります (非レガシー コードでは)。
言語の他のすべての部分でそのような問題を抱えたくないでしょう?