2012-08-05 56 views
-1

以下是c中的代碼行。L值要求錯誤

 i++=i++; 

輸出:需要錯誤左值。
那麼這個錯誤表明什麼?

+2

C與C++不同。 'i ++'返回一個整數值,而不是對'i'的引用。所以你不能分配它。 – 2012-08-05 11:48:09

+1

http://stackoverflow.com/questions/1353384/l-value-required-error可能的重複。 – DCoder 2012-08-05 11:48:40

+4

只是停止做愚蠢的事情 – inf 2012-08-05 11:49:33

回答

1

i++的結果不是左值,標準要求賦值運算符的左操作數爲左值。

即使允許您的程序調用未定義的行爲,因爲您試圖在兩個序列點之間修改相同的對象兩次。

+0

你能解釋一下簡單的順序點是什麼? – ghostrider 2012-08-05 11:54:44

+0

@ghostrider序列點是程序執行過程中值同步的某個點。 C標準詳細列出了所有的順序點。例如,在'i ++ = i ++;'中,在整個表達式之前和';'之後都有一個序列點。 – ouah 2012-08-05 11:58:21

+0

你可以給一個更簡單的解釋嗎? – ghostrider 2012-08-05 12:01:15

0

這表明i++不可分配。這就像試圖分配給1(當i存儲值1i++將產生)。

當然這沒有意義。您可以將其與嘗試將顏色改爲「紅色」相比較,當您實際上想要先將紙張塗成紅色再塗上藍色時。

0

這是要求左值。你正在做一個任務left = right。我不能離開,因爲這是正確的。 刪除簡潔和你的代碼行的類型變成

i + 1 = i + 1,這是一個方程而不是賦值。

最重要的是,你究竟在做什麼?