2014-11-25 102 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,這就是錯誤的原因。

相關問題