0

这里的网站说:http: //publib.boulder.ibm.com/infocenter/macxhelp/v6v81/index.jsp ?topic=%2Fcom.ibm.vacpp6m.doc%2Flanguage%2Fref%2Fclrc05lvalue.htm

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:

exception 3example?

4

2 回答 2

3

数组确实是左值,但它们不可修改。标准说:

6.3.2.1

可修改的左值是没有数组类型的左值

于 2013-08-31T10:37:38.427 回答
1

问题2的答案。

假设你有一个 type 的对象double。您获取一个指针并将其转换为不同的指针类型。然后使用新指针取消引用该对象。这是未定义的行为。

double x = 42.0;
double *p = &x;
int *q = (int *) p;

*q;

这里,*q是一个类型的左值,int它不引用类型的对象int

于 2013-08-31T10:50:59.000 回答