c++ - 非成员运算符重载是什么意思

标签 c++ operator-overloading

我最近正在阅读一篇关于运算符重载的文章,其中提到了非成员运算符重载。如果有人能用一个例子解释非成员运算符重载的含义,我将不胜感激。我知道成员运算符重载是什么(类中重载运算符类型(二进制..等)的方法。我在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/

相关文章:

c++ - 为什么 MSVC 不能正确解析 this->sth 对重载 operator-> 的调用

c++ - 基于最大四边形轮廓OpenCV裁剪图像

c++ - 如何在没有内存泄漏的情况下登录 ISA Server 2006 C++ SDK

c++ - C++编译错误: Undefined identifier (for a function parameter)

c++ - 穷举搜索 : minimum number of coins for change. 使用递归时保留解决方案数组

c++ - 使用自定义类的 C++ STL 映射的运算符重载

c++ - 重载 ( ) 运算符

c++ - ARM 设备的交叉编译库

c++ - GCC 中的表达式中间体(如果这就是它们的实际名称)

C++函数重载