条件三元运算符中的模

use*_*414 0 c++

在 C++ 中,有人写了以下内容:

player = (player % 2) ? 1 : 2;
Run Code Online (Sandbox Code Playgroud)

从我读过的内容来看,如果括号内的条件为真,变量“player”将评估为 1,但这似乎不是一个可以为真或为假的条件。

Cor*_*mer 5

如果playerint或 隐式转换为int,则模运算将分别返回01在这种情况下为偶数或奇数。

从那里,int有一个隐式转换到bool这样,0评估为false并且所有非零值(包括负值)评估为true

示例
开始于

player = 2;
Run Code Online (Sandbox Code Playgroud)

我们可以按照三元表达式一步一步来

player = (player % 2) ? 1 : 2;
player = (2 % 2) ? 1 : 2;
player = 0 ? 1 : 2;  // 0 evaluates to false
player = 2;
Run Code Online (Sandbox Code Playgroud)

然而,我认为这个逻辑是有缺陷的,他们的意思可能是

player = (player % 2) ? 2 : 1;
Run Code Online (Sandbox Code Playgroud)

这确实会以交替的方式“切换”玩家,这意味着什么时候player最初是1,在三元之后,它将被分配2,反之亦然。