2013-10-26 15 views
1

在下面的代碼段,我期待的答案是5,但它顯示編譯時錯誤:preincremented變量(++ i)++的post inces錯誤?

#include <stdio.h> 
int main() 
{ 
    int i = 4; 
    printf("%d", (++i)++); 
    return 0; 
} 

的原因是什麼?這裏++i返回一個正確的值所以我們可以增加它的權利?

+1

即使它在語法上是正確的,它也會是未定義的行爲,所以你不能指望5. –

+0

不完全是重複的,但答案有比這裏的答案更好的答案。 –

+0

@PascalCuoq這是int i = 4(編輯) – san45

回答

4

​​或preincrement\decrement要求lvalue並返回rvalue。這就是爲什麼你會得到一個錯誤。

++i =>returns rvalue 

(rvalue)++ => error 

在C++的情況是因爲reference types.InÇ不同,我們沒有任何reference類型。

in c++ 

++i => returns reference to i that is lvalue. 

lvalue++ => Way to go! 

Demo for c++

即使是工作,這是一個undefined behavior。您不應該在同一個語句中多次修改相同的變量。

+3

這不是UB。它甚至沒有編譯。 – 2013-10-26 11:13:15

+0

@ H2CO3是的!糾正。 – Arpit

+1

謝謝。 [15個字符] – 2013-10-26 11:24:02

5

(++ i)返回一個右值。這不能遞增。

+0

是++我返回左值? – san45

+1

@ san45你有沒有想過讀這一行? 「(++ i)返回一個右值」 - 那麼它會返回一個左值? **不,不。 ** – 2013-10-26 11:14:22

+0

在下面發表評論時說++ ++我會返回lvalve,爲什麼 – san45