C++运算符==重载
C++ operator== overloading
可能的重复项:
运算符重载
以下重载运算符==的方法有什么区别?
// stroustrup way
friend bool operator== (MyClass &lhs, MyClass &rhs);
和
// as taught in other places, including caltech
bool MyClass::operator== (MyClass &rhs);
哪种方式更好?
// stroustrup way
friend bool operator== (MyClass &lhs, MyClass &rhs);
参数应const
:
friend bool operator==(const MyClass& lhs, const MyClass& rhs);
这是首选,因为它在可以隐式构造第一个参数时起作用。 例如,如果std::string
只有一个成员函数operator==
,那么"abc" == my_std_string
不会调用它! 但是,可以通过从"abc"隐式构造字符串来调用非成员函数(更好的是,在这种特殊情况下,出于性能原因可以提供单独的bool operator==(const char*, const std::string&)
,但重点仍然存在 - 非成员函数可以帮助确保运算符在任一端使用用户定义的类型)。
另外,隐式构造函数有点危险 - 您需要认真考虑使用它们的便利性与危险性。
类似地,如果你有ObjectOfAnotherClassType == ObjectOfMyClassType
,并且AnotherClass
有一个像operator MyClass() const
这样的演员运算符,那么非成员/朋友operator==
将允许演员加入并能够进行比较;成员operator==
形式不会。
最后一点:如果没有其他方法可以访问您需要比较的数据,则只需将非成员operator==
设为friend
。 否则,您可以在类外部声明/定义它,如果您希望实现包含在标头中,该标头可能从最终链接到同一可执行文件的多个翻译单元中,可以选择inline
。 不过没有太大的危害,让它成为friend
是将定义放在类模板中的唯一方法,在那里你不必重复"template <typename ...>
"的东西和参数......
首先是外部友元函数(自由函数)
friend bool operator== (MyClass &lhs, MyClass &rhs);
二是成员函数
bool MyClass::operator== (MyClass &rhs);
您应该始终使用第二个变体,然后您可以
您应该使用第一个变体,以防:1)第一个参数是外部(库)类
friend ostream& operator<< (ostream &out, MyClass &m)
2) 运算符的逻辑与您的类无关,必须单独实现
friend bool operator(const MyClass& my, const std::string& string_form)
(因为你的类无法知道比较运算符中可能需要的所有类)
这个 :
friend bool operator== (MyClass &lhs, MyClass &rhs);
是一个函数,用于比较两个对象。
这:
bool MyClass::operator== (MyClass &rhs);
是一个成员函数。
您应该使用编码标准建议的那个,或者使用您喜欢的那个。没有比这更好的了。有些人(包括我自己)更喜欢将比较运算符作为函数,而另一些人则更喜欢将其作为成员函数。
顺便说一下,参数应该是const MyClass &
类型。
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 重载运算符new[]的行为取决于析构函数
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- 在 myVector 类中重载运算符 + 时出错
- 为什么常量词在重载运算符中不与 ostream 对象一起使用<<?
- 如何在 cpp 中重载运算符 +=?
- C++ 如何重载 [] 运算符并进行函数调用
- 重载运算符的范围是什么?它是否会影响作为类成员的集合的插入函数?
- 为什么我可以在不重载 "=" 运算符的情况下将一个对象分配给另一个对象?
- 重载运算符有地址吗?
- 如何迭代重载运算符 [] 的类?
- 重载运算符与添加问题
- 模板基类中的重载运算符
- 如何调用用于重载运算符"<<"的 friend 函数?
- 在 C++17 中的命名空间和子命名空间中重载运算符是不明确的
- 重载运算符<<采用谷歌 C++ 风格
- C++ 如何正确重载 + 运算符
- cout (<<) 重载运算符不打印减去的矩阵
- 如何在 c++ 中重载运算符 + 以便能够 whrite c_str = "smth" + c_str;
- 重载运算符*以获取对另一个类的实例的引用