Akh*_*rya -1 c++ inequality if-statement boolean implicit-conversion
我想比较四个整数,看看它们是否相等。于是写了下面的,
int a = 1, b = 2, c = 3, d = 4;
if (a != b != c != d)
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
这显然没有显示错误。但是,事实上,给出了错误的答案。有人可以解释一下吗?
if 语句中的条件
if (a != b != c != d)
Run Code Online (Sandbox Code Playgroud)
可以等效地重写为
if ( ( ( a != b ) != c ) != d )
Run Code Online (Sandbox Code Playgroud)
第一个子表达式的a != b计算结果为 boolean true。所以你有了
if ( ( true != c ) != d )
Run Code Online (Sandbox Code Playgroud)
子表达式true != c被隐式转换为
if ( ( 1 != c ) != d )
Run Code Online (Sandbox Code Playgroud)
这显然不是您想要的,尽管它是有效的 C++。
看来你的意思是这样的
if ( ( a != b ) && ( b != c ) && ( c != d ) )
Run Code Online (Sandbox Code Playgroud)