sto*_*ren 0 c operator-keyword
代码很简单,我只想测试&和++之间的优先级.
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;
}
Run Code Online (Sandbox Code Playgroud)
当gcc编译它时,出现了两个错误.在我看来,这a++是一个正确的值,但它++a是一个左值,因此在使用&获取它时,它不应该是一个错误,
你似乎误解了lvalue和之间的区别rvalue.在您的情况下,表达式a++和++a是rvalues和不能分配.
这是对区别的一个很好的描述,但是判断它是否是一个快速的方法lvalue是看看如果你把它放在一个左侧是否会出错=.
请注意,以下两个语句都会产生您描述的相同错误.
++a = 5;
a++ = 6;
Run Code Online (Sandbox Code Playgroud)
更新:正如下面提到的@mafso,++a确实是一种lvalue语言c++,在编译时你不会看到该表达式的错误g++.