0
在C++中,有人寫道:模在有條件的三元運算符
player = (player % 2) ? 1 : 2;
從我讀過,變「玩家」將評估爲1,如果括號內的條件爲真,但此似乎不是一個既可以是真實也可以是假的條件。
在C++中,有人寫道:模在有條件的三元運算符
player = (player % 2) ? 1 : 2;
從我讀過,變「玩家」將評估爲1,如果括號內的條件爲真,但此似乎不是一個既可以是真實也可以是假的條件。
如果player
爲int
或具有隱式轉換到int
,則模運算將或者在這種情況下返回0
或1
爲偶數或奇數分別。
從那裏,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
反之亦然意思。
隱式轉換。這是可怕的代碼,但不幸的是很常見。條件*應該*寫爲'player%2 == 1'。 – 2014-10-28 21:58:32