条件三元算子中的模 在C++中,有人写了如下: player = (player % 2) ? 1 : 2;

条件三元算子中的模 在C++中,有人写了如下: player = (player % 2) ? 1 : 2;,c++,C++,根据我所读的,如果偏执词中的条件为真,变量“player”将计算为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 ?

根据我所读的,如果偏执词中的条件为真,变量“player”将计算为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
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
,反之亦然。

隐式转换。这是一个糟糕的代码,但不幸的是相当普遍。条件应写为
播放器%2==1
。隐式转换。这是一个糟糕的代码,但不幸的是相当普遍。条件应该写为
播放器%2==1