C および C では、文字列リテラルはすべてのリテラルが r であるという規則の例外です。 -価値観。 C 03 標準では、他のリテラルは r 値であるのに対し、文字列リテラルは l 値であると規定されています。同様に、C99 標準は文字列リテラルを左辺値として定義します。
この区別は、オブジェクトとしての文字列リテラルの性質に由来します。固定値を表す他のリテラルとは異なり、文字列リテラルは配列型のオブジェクトです。 C では、配列は式内の左辺値としてのみ存在できます。
文字列リテラルをより便利にするために、文字列リテラルを配列型ではなくポインター型を持つものとして定義することは非現実的です。これにより、文字列リテラルに sizeof 演算子を適用できなくなります。
C99 標準では、l 値でもある複合リテラルが導入されました。これらの導入は、リテラルが特別な例外ではなく l 値であるという標準への移行を示唆しています。複合リテラルを使用すると、特定の値で初期化された一時オブジェクトを作成できます。文字列リテラルと同様に、それらは左辺値として存在します。
この区別の理由は、ハードウェア アーキテクチャに根ざしている可能性もあります。初期のコンピュータでは、文字列は文字配列へのポインタではなく文字配列として格納されていました。この歴史的背景は、文字列リテラルを左辺値として定義する選択に影響を与えた可能性があります。
文字列リテラルは、配列型のオブジェクトであるため、C および C では左辺値として定義されます。他のリテラルは固定値ですが、文字列リテラルは変更または参照できるオブジェクトです。この区別により、プログラミングで文字列リテラルをより柔軟に使用できるようになります。
以上が他のリテラルが R 値であるのに、C および C では文字列リテラルが L 値であるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。