2013-10-22 75 views

回答

4

它們都是未定義的行爲。

j = i++ * i++; // undefined behavior 
j = i++ & i++; // undefined behavior 

對象i的值在兩個示例中的兩個序列點之間被修改多次。

1
j= i++ * i++ ; 

j=i++ & i++ ; 

兩者都是不確定的,因爲改變序列之間的I值點

Why are these constructs undefined behavior?

+1

Your link is tagged * C++ *許多概念是不同的,因爲* C++ *現在已經排序*之前和之後*一個好的* C *問題將[這些結構爲什麼是未定義的行爲?](http:// stackoverflow。 COM /問題/ 949433 /爲什麼 - 是 - 這些構建體 - 未定義行爲)。 –

+0

@ShafikYaghmour感謝這個鏈接,在回答中修改。 – Gangadhar

1

隨着神祕和ouah已經說過,無論是不確定的。

j = i++ && i++; 

將被明確定義,因爲& &捷徑,這意味着,它必須首先evalutate左操作數,然後 - 如果左操作數是真實的 - 正確的操作。

+3

'i ++ && i ++'的定義不是因爲捷徑,而是因爲&&'操作符在評估第一個操作數後引入了一個序列點。 – ouah

+0

可以快捷方式,或*必須*快捷方式? :) –

+0

@ouah:沒錯,它必須這樣做,因爲它是快捷方式。 –

相關問題