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:
请用例子
解释异常3
?
最佳答案
数组确实是左值,但它们是不可修改的。标准说:
6.3.2.1
A modifiable lvalue is an lvalue that does not have array type
关于c - L值到R值的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18547174/