リテラル文字列が左辺値なのか右辺値なのか疑問に思うだけです。他のリテラル (int、float、char など) は左辺値または右辺値ですか?
関数の戻り値は左辺値または右辺値ですか?
どうやって違いを見分けるのですか?
C 標準では、左と右を表す元の用語は次のように認識されL = R
ます。ただし、 lvalue をlocator valueと考えるように指示されています。これは、大まかに言えば、オブジェクトのアドレスを取得できるため、そのオブジェクトには場所があることを意味します。( C99の 6.3.2.1 を参照してください。)
同様に、標準では右辺値という用語を放棄し、「式の値」のみを使用しています。これは、int、char、float などのリテラルを含む、実質的にすべてのものです。さらに、右辺値でできることはすべて左辺値でも実行できるため、すべての左辺値を右辺値と考えることができます。
C には 2 種類の式があります。 1. 左辺値: 左辺値である式は、代入の左辺または右辺のいずれかとして現れる場合があります。2. 右辺値: 右辺値である式は、代入の右側には表示されますが、左側には表示されません。変数は左辺値であるため、割り当ての左側に表示される場合があります。数値リテラルは右辺値であるため、割り当てられず、左側に表示されない場合があります。以下は有効なステートメントです。int g = 20; ただし、次のステートメントは有効ではないため、コンパイル時にエラーが発生します: 10=20;
Microsoft から C++の定義があります。この定義では、"hello world" などのリテラル文字列は、定数であり一時的ではないため、左辺値です。実際には、アプリケーションの存続期間中持続します。