在C ++中,有人写了以下内容:
player = (player % 2) ? 1 : 2;
从我所读到的,如果parantheses中的条件为真,变量'player'将评估为1,但这似乎不是一个可能是真或假的条件。
答案 0 :(得分:3)
如果player
是int
或隐式转换为int
,那么模数操作将返回0
或1
,在这种情况下分别是偶数或奇数。
从那里,int
隐式转换为bool
,0
评估为false
,所有非零值(包括负值)评估为{{ 1}}。
示例强>
从
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
,反之亦然。