2014-10-28 63 views
0

在C++中,有人寫道:模在有條件的三元運算符

player = (player % 2) ? 1 : 2; 

從我讀過,變「玩家」將評估爲1,如果括號內的條件爲真,但此似乎不是一個既可以是真實也可以是假的條件。

+0

隱式轉換。這是可怕的代碼,但不幸的是很常見。條件*應該*寫爲'player%2 == 1'。 – 2014-10-28 21:58:32

回答

3

如果playerint或具有隱式轉換到int,則模運算將或者在這種情況下返回01爲偶數或奇數分別。

從那裏,int具有隱式轉換到bool使得0計算結果爲false和所有非零的值(包括負值)評估爲true


player = 2; 

開始,我們可以按照三元表達一步一步

player = (player % 2) ? 1 : 2; 
player = (2 % 2) ? 1 : 2; 
player = 0 ? 1 : 2; // 0 evaluates to false 
player = 2; 

不過,我認爲這種邏輯是有缺陷的,他們很可能意味着

player = (player % 2) ? 2 : 1; 

這將確實是「開關」的玩家以交替的方式,當player最初1,三元之後將被分配2反之亦然意思。