c++ - 如果我只实现运算符 <,我可以使用运算符 == 吗?

标签 c++ operator-overloading

我已经实现了operator<对于某个对象。 逻辑上,如果 !(a < b)!(b < a)这意味着a == b .

这是自动推断的吗?我可以使用 ==如果我只实现 < ?

最佳答案

C++ 无法自动推断这一点有几个原因:

  1. 将每种类型都与 operator< 进行比较是没有意义的,因此类型不一定定义为 operator< .
    • 这意味着 operator==不能根据 operator< 自动定义
  2. operator<不需要比较它的论点。程序员可以为他们的类型定义运算符,以便对他们的参数做几乎任何事情
    • 这意味着您关于 !(a < b) && !(b < a) 的声明相当于a == b假设这些运算符已定义,则不一定正确。

如果您想要 operator==您的类型的功能,只需自己定义一个。没那么难:)

// For comparing, something like this is used
bool operator==(const MyType& lhs, const MyType& rhs)
{
    // compare (or do other things!) however you want
}

// ... though it's not the only thing you can do
//  - The return type can be customised
//  - ... as can both of the arguments
const MyType& operator==(int* lhs, const MyType* const rhs)
{
    return lhs;
}

关于c++ - 如果我只实现运算符 <,我可以使用运算符 == 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44129275/

相关文章:

c++ - 在 OpenGL 中旋转立方体

c++ - 将变量传递给 SQL

c++ - (C++)计算文本文件中数组的反转,每行一个数组?

c++ - 如何在 Mac OS X 上监视目录中的更改?

C++ 输入运算符重载 >>

使用 List<T> 重载 C# 运算符

c++ - 我需要使用同一个对象在一个函数内调用一个 C++ 函数吗?

c++ - 未取消引用的迭代器是否超过了数组未定义行为的 "one past-the-end"迭代器?

c# - 这是避免不断创建对象的好习惯吗?

c++ - operator= 重载返回参数而不是 *this