我们可以在C++中的3个变量之间使用两个运算符吗
我想比较四个整数,看看它们是否相等。于是写了下面的,
int a = 1, b = 2, c = 3, d = 4;
if (a != b != c != d)
{
//do something
}
这显然没有显示错误。但是,事实上,给出了错误的答案。有人可以解释一下吗?
回答
if 语句中的条件
if (a != b != c != d)
可以等效地重写为
if ( ( ( a != b ) != c ) != d )
第一个子表达式的a != b计算结果为 boolean true。所以你有了
if ( ( true != c ) != d )
子表达式true != c被隐式转换为
if ( ( 1 != c ) != d )
这显然不是您想要的,尽管它是有效的 C++。
看来你的意思是这样的
if ( ( a != b ) && ( b != c ) && ( c != d ) )
- `if ( ( a != b ) && ( b != c ) && ( c != d ) )` 允许 `a == d`。`if (std::set{a, b, c, d}.size() == 4)` 似乎更合适。