如果我想重载运算符+
,哪个原型(prototype)是正确的?
D运算符+(const D& lhs, const D& rhs);
然后将其声明为 D 的友元函数。D运算符+(const D& s);
然后声明为D的成员函数。
最佳答案
第一个是正确的,第二个是完全错误的。你可以通过写这个来改进第二个
D operator+(const D& s) const;
但还是错了。原因是编译器将在第二个版本中对 + 运算符的左右两侧应用不同的规则。例如给出这段代码
class C
{
};
class D
{
public:
D(const C&);
};
C c;
D d;
d = d + c; // legal with both versions
d = c + d; // not legal with the second version
不同之处在于,编译器将从 C 对象创建临时 D 对象作为方法或函数参数,但不会对临时对象进行方法调用。
简而言之,第一个版本平等对待左侧和右侧,因此更符合编码人员的期望。
关于c++ - C++中的运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7013786/