【发布时间】:2014-05-29 18:34:50
【问题描述】:
请解释为什么第二个表达式返回 false
cout << (4==4) << endl; //1
cout << (4==4==4) << endl; // 0
【问题讨论】:
标签: c++
请解释为什么第二个表达式返回 false
cout << (4==4) << endl; //1
cout << (4==4==4) << endl; // 0
【问题讨论】:
标签: c++
(4==4==4) 基本上是((4==4)==4) 这是(true == 4) 这是(1==4) 1 这是false 2 这是打印为0 .
请注意,== 具有关联性 left-to-right,但这并不重要(在 这种 情况下),因为即使它具有从右到左的关联性,结果也会是相同的。
1.由于积分促销。
2.请注意,有人可能会认为(true==4) 中的4 可以被视为true(毕竟4 不为零,因此true)。这种想法可能会得出结论(true==4) 是(true==true) 是true。但这不是它的工作方式。是 bool 被提升为 int,而不是 int 被提升为 bool。
【讨论】:
if ((x == 4) && (y == 4))
promotion 是有原因的;你统一到更一般的类型
4==4 的计算结果为true,为了与4 进行比较,它被转换为1。 1 == 4 是false,也就是0。
【讨论】:
您不能合理地将二元比较运算符应用于两个以上的运算符(除非您有覆盖使其成为可能,以某种方式)。
比较未知数量的参数:
#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
【讨论】: