10

「Lvalueが必要です」というエラーメッセージは実際にはどういう意味ですか?

4

5 に答える 5

9

左辺値は、割り当ての左側に表示できるもの、つまり「割り当て可能なもの」です。

したがって、左側が「割り当て可能」でない割り当てを探します。たとえば、これと同じくらい単純なものがそのようなエラーを引き起こす可能性があります

if (0 = foo)
{

}

ここでは、誤って == ではなく = を使用したため、定数に代入しようとしています。

こちらもご覧ください

于 2010-10-09T08:51:36.857 に答える
6

これは、実装がオブジェクトを期待していることを意味しますが、値または関数を渡しただけです。これは、左辺以外の値を渡した割り当て、または関数以外に適用されたアドレス操作に対して発生します。

Lvalue は「ロケーション値」の略で、メモリ ロケーションとして宣言された、またはメモリ ロケーションを参照するオブジェクトを参照する式を意味しregisterます。のようなもの42は、どちらの基準にも一致しない値です。より正式には3つのカテゴリがあります

  • 左辺値: オブジェクトの参照。これには、const と宣言されたオブジェクトが含まれます。これは変更不可能な左辺値です。
  • 関数指定子: 関数の参照。printfは機能指定子ですが、&printfそうではありません*&printf
  • その他: 「右辺値」と呼ばれることもあり、標準では「式の値」と記述されています。例としては、var + 0(オブジェクトに関連付けられていない値を生成する)、または列挙型の列挙子があります。&printfこのカテゴリに属します。
于 2010-10-09T08:55:04.937 に答える
2

C99 標準の状態 (6.3.2.1):


Anlvalueは、オブジェクト型または void 以外の不完全な型を持つ式です。lvalue評価時に an がオブジェクトを指定しない場合、動作は未定義です。オブジェクトが特定のタイプを持っていると言われる場合、タイプはlvalue、オブジェクトを指定するために使用されるによって指定されます。変更可能lvalueとは、lvalue配列型を持たない、不完全な型を持たない、const 修飾された型を持たない、およびそれが構造体または共用体である場合、メンバー (再帰的にメンバーまたは要素を含む) を持たない です。含まれているすべての集約または共用体の) const 修飾された型。

この名前は、左オペランドが (変更可能) である必要があるlvalue代入式 に由来します。オブジェクトの「ロケーター値」を表すと考えたほうがよいでしょう。この国際規格では、「式の値」と呼ばれることがあります。E1 = E2E1lvaluervalue


言い換えれば、lvalue変更の可能性を見つけることができるものです。変更可能lvalueとは、実際に変更が許可されているものです。

たとえば、C ステートメントは次のとおりです。

x = 7;

は であるため有効xですlvalue。一方、声明は次のとおりです。

14 = 7;

は課題で見つけられるもの14ではないため、無効です。

スニペット:

const int x = 7;

変更が許可されていなくても、実際にはlvalue呼び出されたものを作成します(変更可能な `lvalue ではありません)。x

于 2010-10-09T08:56:13.903 に答える
0

ほとんどの場合、割り当てられないものに値を割り当てようとしたことを意味します。たとえば、次の両方が原因でエラーが発生する可能性があります。

5 = 5; myObject-> myMethod()= 5;

于 2010-10-09T09:33:38.393 に答える
0

function(parameter) = value;可能なコンテナではないものに値を割り当てることができないため、何かをコーディングするとエラーが発生します。

于 2010-10-09T08:55:44.100 に答える