我有A级 如何重载运算符==来执行
A a,b,c;
if (a==b==c) {}
谁能帮帮我?
最佳答案
非常简短的回答:不!
稍微长一点的答案:不要尝试这个。
说明:每个 C++ 程序员都习惯于让比较运算符返回一个 bool 或可转换为 bool 的东西。只是因为输入诸如 if (a==b)
之类的东西是很自然的。
因此,如果表达式 a==b
返回 bool 值 x
,则 a==b==c
将意味着比较 x
与 c
。这根本没有意义。即使你让它编译,例如以这种方式比较整数,它不会产生您期望的结果。
因此,虽然技术上我可以想出一个解决方案来解决您似乎想要的问题(比较三者是否相等),但正确的做法是始终在 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/