2014-11-25 78 views
0

代码很简单,我只想测试&和++之间的优先级。int * p =&a ++和int * p =&++ a

int main() 
{ 
    int a=10; 
    int *p; 
    int *q; 
    p=&++a;//error: lvalue required as unary ‘&’ operand 
    q=&a++;//error: lvalue required as unary ‘&’ operand 
    return 0; 
} 

GCC编译它,两个错误就出来了。在我看来,a++是一个正确的价值,但++a是左值,所以它不应该是一个错误,当使用&得到它解决,

回答

5

看来你误会lvaluervalue之间的差异。在你的情况下,表达式a++++a都是rvalues,不能分配。

Here是区别的一个很好的描述,但是判断它是否为lvalue的快速方法是查看在=的左侧是否出现错误。

请注意,以下两条语句都会产生您描述的相同错误。

++a = 5; 
a++ = 6; 

更新:由于@mafso下面提到,++a确实是在语言c++lvalue,并与g++编译时,你将不会看到错误的表达。

+0

是的,你说得对,我在我的电脑上试过。 – storen 2014-11-25 02:44:54

+1

@storen如果解决了你的问题,请接受答案。 – merlin2011 2014-11-25 02:58:25

-1

运算符&的对象是lvalue,运算符++也是一样,但是在++ a完成后,它返回rvalue,这就是错误的原因。

相关问题