我最近正在阅读一篇关于运算符重载的文章,其中提到了非成员运算符重载。如果有人能用一个例子解释非成员运算符重载的含义,我将不胜感激。我知道成员运算符重载是什么(类中重载运算符类型(二进制..等)的方法。我在SO上遇到了这个post,这让我相信非成员运算符重载的目的是处理运算符重载,其中第一个参数不是类,而只是 native 类型。任何解释非成员运算符重载的链接或示例都将不胜感激。
最佳答案
这意味着你可以在类外重载:
struct X { int data; };
bool operator<(X const& a, X const& b)
{
return a.data < b.data;
}
这对于不对称重载很有用,其中左操作数不需要是您自己的类型:
bool operator<(int a, X const& b)
{
return a < b.data;
}
这里常见的习惯用法是将其与类内定义和友元声明结合起来:
struct X
{
int data;
friend bool operator<(X const& a, X const& b) { return a.data<b.data; }
friend bool operator<(int a, X const& b) { return a<b.data; }
};
在这里,operator<
从技术上讲仍然是非成员。
正如下面 DrewDormann 所指出的,此操作的另一个有用的副作用是 (X const&, X const&)
将适用于任何可隐式转换为 X const&
的操作数,而不仅仅是该确切类型的表达式。
关于c++ - 非成员运算符重载是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15466676/