Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 奇异布尔转换(?)_C++ - Fatal编程技术网

C++ 奇异布尔转换(?)

C++ 奇异布尔转换(?),c++,C++,请解释为什么第二个表达式返回false cout << (4==4) << endl; //1 cout << (4==4==4) << endl; // 0 cout(4==4==4)基本上是((4==4)==4)这是(true==4)这是(1==4)这是这是这是假的这是打印成0的 请注意,=具有关联性,但这并不重要(在本例中),因为即使它具有从右到左的关联性,结果也会是相同的 一,。由于整体推广 2.请注意,人们可能会认为中的4

请解释为什么第二个表达式返回false

   cout << (4==4) << endl; //1
   cout << (4==4==4) << endl; // 0
cout
(4==4==4)
基本上是
((4==4)==4)
这是
(true==4)
这是
(1==4)
这是
这是
这是假的
这是打印成
0

请注意,
=
具有关联性,但这并不重要(在本例中),因为即使它具有从右到左的关联性,结果也会是相同的


一,。由于整体推广

2.请注意,人们可能会认为
中的
4
(true==4)
可以被视为
true
(毕竟
4
是非零的,因此
true
)。这种想法可能会得出这样的结论:
(true==4)
(true==true)
这是
真的
。但事实并非如此。它是提升为int的bool,而不是int到bool。

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';
}
#包括
模板
布尔相等(常数A和A,常数B和B){
返回a==b;
}
模板
布尔相等(常数A和A、常数B和B、常数其他和…其他){
返回a==b&&equal(b,其他…);
}
int main(){

std::cout那么我如何比较3个元素呢?@OrangeFox:
if((x==4)和&(y==4))
它被称为
促销
是有原因的;您可以统一到更通用的type@ScarletAmaranth:Yes.:-@MooingDuck:避免递归,改用迭代怎么样?…只有它使用数组;我们才能避免这种情况,减少堆栈使用和拷贝吗?EWW;不要在这里强制使用copyable;按const-ref执行;您所需要的只是相等可比