2011-11-02 24 views

回答

6

在C++中,這是未定義的行爲,因爲這裏已經討論了一個巨大的次數。在C#中,行爲已被很好地定義。由於未定義的行爲,可能會有任何結果。

無論行爲是否定義良好,您都不應該這樣寫代碼。

+0

+1對於gazillion – KevinDTimm

+0

gazillion是一種輕描淡寫。 – Marlon

4

在C++中我相信行爲是未指定的。

在C#中,評估的順序通常更加嚴格,並且答案是有保證的。

在任何一種語言中,都應該避免這樣的代碼。這很難理解,並且通常是爲了顯示作者是多麼「聰明」,而不是創建可以很容易地看到是正確的代碼,並在必要時進行更改。

+0

@HusseinX:究竟是什麼原因?你有兩種不同的語言,有兩種不同的規格。在某些情況下,看起來像他們會給出相同答案的操作不會。這應該*預期*與兩種不同的語言。 –

+0

@HusseinX Jon和我都解釋了原因。你的代碼是C++中的UB。 –