【发布时间】:2016-11-29 11:09:17
【问题描述】:
为什么会这样实现:
T& T::operator+=( const T& ) {
// ... implementation ...
return *this;
}
T operator+( const T& lhs, const T& rhs ) {
T temp( lhs );
return temp += rhs;
}
比这个传播得更频繁:
T& T::operator+=( const T& rhs ) {
*this = *this + rhs;
return *this;
}
T operator+( const T& lhs, const T& rhs ) {
// ... implementation ...
return some_result;
}
是否有任何原因,或者只是一个偶然的巧合,我看到人们在我阅读的文献中多次以这种方式实现它,而从来没有相反的方式?
【问题讨论】:
-
测试第二个,你会发现它不起作用。究竟它如何不起作用将取决于
// ... implementation ...中发生的事情,但它不会起作用。最有可能的是,return *this + rhs;将完全无法对this做任何事情。 -
@user2357112:我的回答是否解释了您发现的问题,还是有其他问题?
-
请不要通过查看答案来更改帖子。它会使答案毫无用处
-
@user2357112 下面的答案是。晚了;我没有想清楚。很抱歉这个错误。
-
@BenVoigt:是的,你的回答似乎解决了所有问题。
标签: c++ operator-overloading code-reuse