非成员操作符重载是什么意思?
What is meant by non-member operator overloading
我最近阅读了一篇关于操作符重载的文章,其中提到了非成员操作符重载。如果有人可以用一个例子解释非成员操作符重载意味着什么,我会很感激。我知道成员操作符重载是什么(重载操作符类型(二进制等)的类中的方法)。我看到了这篇关于SO的文章,这让我相信非成员操作符重载的目的是处理操作符重载,其中第一个参数不是类,只是一个本机类型。任何解释非成员操作符重载的链接或示例都将非常感谢。
这意味着你可以在类外重载:
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<
在技术上仍然是非成员。
另一个有用的副作用,正如德鲁多曼指出的那样,(X const&, X const&)
将适用于任何隐式转换为X const&
的操作数,而不仅仅是该类型的表达式。
最常见的方法是重载operator<<将在std::cout
上调用:
namespace X {
class MyClass {
...
};
}
std::ostream& operator<< (std::ostream&, const X::MyClass&);
this是在std::ostream成员上调用的,所以你不必在类中定义它。然而,有时该功能不能通过公共接口实现(因为操作符需要访问数据表示)。
相关文章:
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 线应该是什么意思
- "CID"在AT+HTTPPARA= "CID" ,1中是什么意思
- 表达式"b=(b-x)&x"是什么意思?
- 这个表达是什么意思?
- 此代码验证公式是什么意思?
- 跟踪日志中的T.11803()是什么意思?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- * 和 ** 在 C++ 函数声明中是什么意思?
- _T("xyz")是什么意思?
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 这行代码到底是什么意思?
- 当我们说在执行程序时将操作系统的控制权传递给main()函数时,我们的意思是什么
- 这句话在c++中的意思是什么
- 这个typedef的意思是什么
- 这句话的意思是什么
- 意思是什么
- 这个句法的意思是什么?