模在有条件的三元运算符

问题描述:

在C++中,有人写道:模在有条件的三元运算符

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

从我读过,变“玩家”将评估为1,如果括号内的条件为真,但此似乎不是一个既可以是真实也可以是假的条件。

+0

隐式转换。这是可怕的代码,但不幸的是很常见。条件*应该*写为'player%2 == 1'。 – 2014-10-28 21:58:32

如果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反之亦然意思。