C++ 如何重载关系运算符以检查两个对象是否相同

C++ How can I overload relational operators to check if two objects are the same?

本文关键字:两个 是否 检查 对象 运算符 何重载 重载 C++ 关系      更新时间:2023-10-16

我正在尝试重载关系运算符(==,>,<,>=,<=),但是如果两个对象不同,我希望能够返回false,而不是返回错误。例如,我有一个 ArrayList 类和一个当前无法比较的 Vector 类。我怎样才能做到这一点?

尝试类似以下内容:

#include <iostream>
class ArrayList {};
class Vector {};
bool operator==(Vector const &v, ArrayList const &al) { return false; }
bool operator==(ArrayList const &al, Vector const &v) { return false; }
int main()
{
    ArrayList al;
    Vector v;
    std::cout << (al == v ? "true" : "false") << std::endl;
    std::cout << (v == al ? "true" : "false") << std::endl;
    return 0;
}

两种比较都将打印为假;

使用模板编辑:

#include <iostream>
#include <type_traits>
class ArrayList {};
class Vector {};
class Whatever {};
template <class T, class U> bool operator==(T const &, U const &) 
{ 
    return std::is_same<T, U>::value;
}

int main()
{
    ArrayList al;
    Vector v;
    Whatever w;
    std::cout << (al == v ? "true" : "false") << std::endl;
    std::cout << (v == al ? "true" : "false") << std::endl;
    std::cout << (w == v ? "true" : "false") << std::endl;
    std::cout << (w == w ? "true" : "false") << std::endl;
    return 0;
}
如果

类相同,这将简单地返回 true,如果不是,这将返回 false。

相关文章: