c++ - 如何重载运算符==?

标签 c++ overloading operator-keyword

我有A级 如何重载运算符==来执行

A a,b,c;
if (a==b==c) {}

谁能帮帮我?

最佳答案

非常简短的回答:不!
稍微长一点的答案:不要尝试这个。

说明:每个 C++ 程序员都习惯于让比较运算符返回一个 bool 或可转换为 bool 的东西。只是因为输入诸如 if (a==b) 之类的东西是很自然的。
因此,如果表达式 a==b 返回 bool 值 x,则 a==b==c 将意味着比较 xc。这根本没有意义。即使你让它编译,例如以这种方式比较整数,它不会产生您期望的结果。

因此,虽然技术上我可以想出一个解决方案来解决您似乎想要的问题(比较三者是否相等),但正确的做法是始终在 C++ 中完成:逻辑链二进制比较:

if (a==b && b==c) {}

对于那些想知道“技术上可行但太丑陋”解决方案的人:
(不要在现实世界中这样做!如果这样做,你应该被解雇。)

template <class T>
struct multiCompareProxy {
  bool b;
  T const& t;

  explicit operator bool() const {return b;}
  multiCompareProxy operator==(T const& rhs) {
    return {b && t.equals(rhs), t};
  }
};

template <class T>
multiCompareProxy<T> operator==(T const& lhs, T const& rhs) {
  return {lhs.equals(rhs), lhs};
}

一个类现在只需要重载 euqals 方法就可以工作:Example

关于c++ - 如何重载运算符==?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22680848/

相关文章:

c++ - Boost 或 VC10 的 TR1 - 哪个更好?

Java 为什么无法在编译时确定泛型类型的方法重载

C++ 迭代器运算符定义

c++ - operator<< 重载 ostream

c++ - C++中的数组下标运算符重载

c++ - 检测输入中的整数溢出

c++ - 在 Windows 环境中如何获取鼠标单击的坐标(相对于窗口)

c++ - 打开对话框

C++ va_list 函数重载

javascript - 在 jQuery 中将字符串添加在一起