可以用一个重载的运算符来实现另一个运算符重载吗?
Is it okay to use an overloaded operator to implement another operator overload?
例如,如果我重载了一个 + 运算符
myClass & operator + (const myClass & rhs)
并且还重载了 = 运算符
myClass & operator = (const myClass & rhs)
两个操作员都工作正常。我可以在我的 += 运算符重载中使用这个重载运算符吗?
myClass & operator += (const myClass & rhs){
*this = *this + progA;
return *this;
}
以上代码运行正常。我只想知道这是否是良好的代码编写习惯,或者我应该重新使用前两个实现中的代码来实现 += 运算符重载。
你可以的。但是,更常见的是使用 operator+=
来实现 operator+
而不是相反。
myClass & operator += (const myClass & rhs) { ... )
// Return by value.
// const member function.
myClass operator + (const myClass & rhs) const
{
myClass ret = *this; // Uses copy constructor, not assignment.
return ret += rhs;
}
界面
myClass & operator + (const myClass & rhs);
不是惯用语,因为你不能做等同于
的事情
int a = 10 + 20;
正在使用
MyClass a = MyClass(args...) + MyClass(args...);
将无法工作,因为 RHS 中的第一个对象是临时对象。
例如,如果我重载了一个 + 运算符
myClass & operator + (const myClass & rhs)
并且还重载了 = 运算符
myClass & operator = (const myClass & rhs)
两个操作员都工作正常。我可以在我的 += 运算符重载中使用这个重载运算符吗?
myClass & operator += (const myClass & rhs){
*this = *this + progA;
return *this;
}
以上代码运行正常。我只想知道这是否是良好的代码编写习惯,或者我应该重新使用前两个实现中的代码来实现 += 运算符重载。
你可以的。但是,更常见的是使用 operator+=
来实现 operator+
而不是相反。
myClass & operator += (const myClass & rhs) { ... )
// Return by value.
// const member function.
myClass operator + (const myClass & rhs) const
{
myClass ret = *this; // Uses copy constructor, not assignment.
return ret += rhs;
}
界面
myClass & operator + (const myClass & rhs);
不是惯用语,因为你不能做等同于
的事情int a = 10 + 20;
正在使用
MyClass a = MyClass(args...) + MyClass(args...);
将无法工作,因为 RHS 中的第一个对象是临时对象。