【问题标题】:Modulo in conditional ternary operator条件三元运算符中的模
【发布时间】:2014-10-28 21:50:47
【问题描述】:

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

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

根据我的阅读,如果括号内的条件为真,则变量“玩家”将评估为 1,但这似乎不是一个可以为真或假的条件。

【问题讨论】:

  • 隐式转换。这是很糟糕的代码,但不幸的是很常见。条件应该写成player % 2 == 1

标签: c++


【解决方案1】:

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

【讨论】:

    最近更新 更多