31
  1. リテラル文字列が左辺値なのか右辺値なのか疑問に思うだけです。他のリテラル (int、float、char など) は左辺値または右辺値ですか?

  2. 関数の戻り値は左辺値または右辺値ですか?

どうやって違いを見分けるのですか?

4

3 に答える 3

40
  1. 文字列リテラルは左辺値ですが、変更することはできません
  2. 右辺値ですが、それがポインターで NULL でない場合、それが指すオブジェクトは左辺値です

C 標準では、左を表す元の用語は次のように認識されL = Rます。ただし、 lvalue をlocator valueと考えるように指示されています。これは、大まかに言えば、オブジェクトのアドレスを取得できるため、そのオブジェクトには場所があることを意味します。( C99の 6.3.2.1 を参照してください。)

同様に、標準では右辺値という用語を放棄し、「式の値」のみを使用しています。これは、int、char、float などのリテラルを含む、実質的にすべてのものです。さらに、右辺値でできることはすべて左辺値でも実行できるため、すべての左辺値を右辺値と考えることができます。

于 2010-01-10T20:11:01.950 に答える
4

C には 2 種類の式があります。 1. 左辺値: 左辺値である式は、代入の左辺または右辺のいずれかとして現れる場合があります。2. 右辺値: 右辺値である式は、代入の右側には表示されますが、左側には表示されません。変数は左辺値であるため、割り当ての左側に表示される場合があります。数値リテラルは右辺値であるため、割り当てられず、左側に表示されない場合があります。以下は有効なステートメントです。int g = 20; ただし、次のステートメントは有効ではないため、コンパイル時にエラーが発生します: 10=20;

于 2013-02-07T13:23:13.633 に答える
1

Microsoft から C++の定義があります。この定義では、"hello world" などのリテラル文字列は、定数であり一時的ではないため、左辺値です。実際には、アプリケーションの存続期間中持続します。

于 2011-05-25T05:44:07.677 に答える