解释为什么第二个表达式返回false
cout << (4==4) << endl; //1
cout << (4==4==4) << endl; // 0
答案 0 :(得分:13)
(4==4==4)
基本上是((4==4)==4)
,(true == 4)
是(1==4)
1 ,false
2 以0
打印。
请注意,==
具有关联性left-to-right,但这并不重要(在此情况下),因为即使它具有从右到左的关联性,结果会是一样的。
1。由于整体推广。
2。请注意,有人可能会认为4
中(true==4)
可被视为true
(在所有4
非零之后,因此true
)。这种想法可能得出结论(true==4)
(true==true)
是true
。但这不是它的工作原理。将bool提升为int,而不是int提升为bool。
答案 1 :(得分:2)
4==4
评估为true
,为了将其与4
进行比较,将其转换为1
。 1 == 4
为false
,即0
。
答案 2 :(得分:1)
你不能合理地将二元比较运算符应用于两个以上的操作符(除非你有覆盖使其成为可能,不知何故)。
比较未知数量的参数:
#include <iostream>
template <typename A, typename B>
bool equal(const A& a, const B& b) {
return a == b;
}
template <typename A, typename B, typename ... Other>
bool equal(const A& a, const B& b, const Other& ... other) {
return a == b && equal(b, other ...);
}
int main() {
std::cout << equal(1, 1, 1) << '\n';
std::cout << equal(1, 2, 3) << '\n';
}
C ++ 11