ホームページ > バックエンド開発 > C++ > 他のリテラルが R 値であるのに、C および C では文字列リテラルが L 値であるのはなぜですか?

他のリテラルが R 値であるのに、C および C では文字列リテラルが L 値であるのはなぜですか?

Patricia Arquette
リリース: 2024-11-28 11:15:12
オリジナル
900 人が閲覧しました

Why Are String Literals L-Values in C and C   While Other Literals Are R-Values?

他のリテラルが R 値であるのに、文字列リテラルが L 値である理由

C および C では、文字列リテラルはすべてのリテラルが r であるという規則の例外です。 -価値観。 C 03 標準では、他のリテラルは r 値であるのに対し、文字列リテラルは l 値であると規定されています。同様に、C99 標準は文字列リテラルを左辺値として定義します。

根拠

この区別は、オブジェクトとしての文字列リテラルの性質に由来します。固定値を表す他のリテラルとは異なり、文字列リテラルは配列型のオブジェクトです。 C では、配列は式内の左辺値としてのみ存在できます。

文字列リテラルをより便利にするために、文字列リテラルを配列型ではなくポインター型を持つものとして定義することは非現実的です。これにより、文字列リテラルに sizeof 演算子を適用できなくなります。

複合リテラルの場合

C99 標準では、l 値でもある複合リテラルが導入されました。これらの導入は、リテラルが特別な例外ではなく l 値であるという標準への移行を示唆しています。複合リテラルを使用すると、特定の値で初期化された一時オブジェクトを作成できます。文字列リテラルと同様に、それらは左辺値として存在します。

歴史的コンテキスト

この区別の理由は、ハードウェア アーキテクチャに根ざしている可能性もあります。初期のコンピュータでは、文字列は文字配列へのポインタではなく文字配列として格納されていました。この歴史的背景は、文字列リテラルを左辺値として定義する選択に影響を与えた可能性があります。

結論

文字列リテラルは、配列型のオブジェクトであるため、C および C では左辺値として定義されます。他のリテラルは固定値ですが、文字列リテラルは変更または参照できるオブジェクトです。この区別により、プログラミングで文字列リテラルをより柔軟に使用できるようになります。

以上が他のリテラルが R 値であるのに、C および C では文字列リテラルが L 値であるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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