在下面的代碼段,我期待的答案是5,但它顯示編譯時錯誤:preincremented變量(++ i)++的post inces錯誤?
#include <stdio.h>
int main()
{
int i = 4;
printf("%d", (++i)++);
return 0;
}
的原因是什麼?這裏++i
返回一個正確的值所以我們可以增加它的權利?
在下面的代碼段,我期待的答案是5,但它顯示編譯時錯誤:preincremented變量(++ i)++的post inces錯誤?
#include <stdio.h>
int main()
{
int i = 4;
printf("%d", (++i)++);
return 0;
}
的原因是什麼?這裏++i
返回一個正確的值所以我們可以增加它的權利?
或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!
即使是工作,這是一個undefined behavior
。您不應該在同一個語句中多次修改相同的變量。
這不是UB。它甚至沒有編譯。 – 2013-10-26 11:13:15
@ H2CO3是的!糾正。 – Arpit
謝謝。 [15個字符] – 2013-10-26 11:24:02
即使它在語法上是正確的,它也會是未定義的行爲,所以你不能指望5. –
不完全是重複的,但答案有比這裏的答案更好的答案。 –
@PascalCuoq這是int i = 4(編輯) – san45