【发布时间】:2013-08-31 10:32:40
【问题描述】:
If an lvalue appears in a situation in which the compiler expects an rvalue,
the compiler converts the lvalue to an rvalue.
An lvalue e of a type T can be converted to an rvalue if T is not a function or
array type. The type of e after conversion will be T.
Exceptions to this is:
Situation before conversion Resulting behavior
1) T is an incomplete type compile-time error
2) e refers to an uninitialized object undefined behavior
3) e refers to an object not of type T undefined behavior
问题1:
考虑以下程序,
int main()
{
char p[100]={0}; // p is lvalue
const int c=34; // c non modifiable lvalue
&p; &c; // no error fine beacuse & expects l-value
p++; // error lvalue required
return 0;
}
我的问题是,为什么在表达式 (p++) ++(postfix) 中需要 l-values 而数组是 l-value 那么为什么会出现这个错误?
gcc 错误:需要左值作为增量操作数|
问题2:
请用example 解释exception 3?
【问题讨论】:
-
数组(静态)的地址不是左值。
-
我不明白您的问题 (#1) 与您引用的段落有何关系。使用后缀
++不涉及从左值到右值的转换。 -
@nickie 当我编译这个语句 p++ 我从 gcc 得到编译时错误
-
是的,当然,@cnicutar 在下面解释了这一点。我认为,这只是您的问题的标题不准确。不涉及左值和右值之间的转换。
-
@nikie p++ 中 p 的类型是什么,先生,您能否详细说明为什么会出现错误?评估 p++ 时究竟发生了什么
标签: c expression lvalue-to-rvalue