模在有条件的三元运算符
问题描述:
在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