这个问题的答案似乎让我感到厌烦,但你如何使用非成员函数进行重载。您是否只是创建了一个程序级函数,并且在原型(或定义)存在的地方,运算符是否为该类类型重载?
答案 0 :(得分:3)
使用成员函数,this
将是左侧参数,这意味着您的运算符只有一个参数(或者对于一元运算符没有参数)。使用独立函数,您必须分别为二元或一元运算符提供两个或一个参数。
一个很好的例子是流的<<
运算符:
class T;
// ...
std::ostream & operator<<(std::ostream &os, const T &val)
{
// ...
return os;
}
此处,os
是左侧参数,val
是右侧参数。
对于“where”,必须在您使用它的地方定义操作符。通常,将它们放在与您为运算符重载的类型相同的位置。
修改强>
对于非平凡的运算符(对原始类型的算术运算),运算符是函数调用的语法糖。当你这样做时:
std::cout << "Hello";
就像写那样:
operator<<(std::cout, "Hello");
但更具可读性。
对于成员运算符,left参数将为this
(这就是成员运算符少一个参数的原因。)