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;