2015-09-27 62 views
-5

我期望這兩個條件會產生相同的答案(nEntries = 0)。我不明白爲什麼沒有。條件表達式行爲不正確

# include <stdlib.h> 
# include <iomanip> 
# include <iostream> 

using namespace std; 

    int main() { 
     int nEntries = 1; 
     nEntries = (nEntries)? nEntries--: nEntries; 
     cout << "nEntries = " << nEntries << endl; // nEntries = 1 
     nEntries = 1; 
     if (nEntries) nEntries--;     // nEntries = 0 
     cout << "nEntries = " << nEntries << endl; 
     return 0; 
} 

它看起來像條件​​表達式做:

if (nEntries) tmp = nEntries--; 

藝術

+1

可能重複的[之間有什麼++ i和i ++差(http://stackoverflow.com/questions/24853/我和我之間有什麼區別) – Axalo

+1

'tmp'從哪裏來,在你的腦海裏? –

回答

3
nEntries = (nEntries)? nEntries--: nEntries; // statement 1 
// ... 
if (nEntries) nEntries--; // statement 2 

1和2是等效的語句,因此沒有理由指望他們表現等同。如你所見,陳述1和它的等價物3有未定義的行爲,所以你不能指望它以任何特定的方式行事。

如果你不熟悉未測序修改是未定義的,見Undefined behavior and sequence points

+0

感謝您的回答。我對不確定的行爲不熟悉,並會嘗試變得更聰明。謝謝。 –