C++ 重写类的运算符==是否会自动重写该运算符=
或者换句话说,对于编译器,这两个块是否相等:C++ 重写类的运算符==是否会自动重写该运算符=,c++,C++,或者换句话说,对于编译器,这两个块是否相等: if (a!=b){ // do something } 不,我们可以 #包括 C类{}; 布尔运算符==(C,C){返回真;} int main(){ C a,b; std::cout运算符重载只能满足您的要求,因此重载==不会影响!=。因此,(a!=b)与(!(a==b))不同 但是,好的做法是重载这两个操作符以避免混淆。不,但从语义上讲,操作符!=应该只实现为return!操作符==(rhs);(或反之亦然),或者类似地,它是否也会覆盖(aI
if (a!=b){
// do something
}
不,我们可以
#包括
C类{};
布尔运算符==(C,C){返回真;}
int main(){
C a,b;
std::cout运算符重载只能满足您的要求,因此重载==
不会影响!=
。因此,(a!=b)
与(!(a==b))
不同
但是,好的做法是重载这两个操作符以避免混淆。不,但从语义上讲,操作符!=应该只实现为return!操作符==(rhs);
(或反之亦然),或者类似地,它是否也会覆盖(aIs是否存在这样一种情况,即这两个操作符的实现不直接依赖于另一个操作符?(当然,您不需要对它们进行功能编程以检查是否相等,但这将是什么应用程序)使用运算符重载将C++11之前的lambda函数拼凑在一起。在该库中,所有运算符重载都返回一个特殊的functor对象,=
和!=
都是独立定义的(即,将其参数委托给相应的运算符)
if (!(a==b)){
// do something
}
#include <iostream>
class C {};
bool operator==(C, C) { return true; }
int main() {
C a, b;
std::cout << (a != b) << std::endl;
return 0;
}
.code.tio.cpp: In function ‘int main()’:
.code.tio.cpp:9:19: error: no match for ‘operator!=’ (operand types are ‘C’ and ‘C’)
std::cout << (a != b) << std::endl;