【发布时间】:2014-10-28 21:50:47
【问题描述】:
在 C++ 中,有人写了以下内容:
player = (player % 2) ? 1 : 2;
根据我的阅读,如果括号内的条件为真,则变量“玩家”将评估为 1,但这似乎不是一个可以为真或假的条件。
【问题讨论】:
-
隐式转换。这是很糟糕的代码,但不幸的是很常见。条件应该写成
player % 2 == 1。
标签: c++
在 C++ 中,有人写了以下内容:
player = (player % 2) ? 1 : 2;
根据我的阅读,如果括号内的条件为真,则变量“玩家”将评估为 1,但这似乎不是一个可以为真或假的条件。
【问题讨论】:
player % 2 == 1。
标签: c++
如果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,反之亦然。
【讨论】: