0

说我有课

class A{
A& operator+ (size_t ofst)
{
     //some calculation
     //return
}
};

在这里我不能写

return this;

因为 A* 不能转换为 A&。那么如何实现这个呢?我想返回一个引用而不是一个指针。


作为类比,流类有 >> 或 << 运算符。据我所知,这两个返回对自身的引用。标准库如何实现这一点?

4

3 回答 3

8

*this

一元运算*符执行取消引用。因此,您从指针开始this,然后申请*获取它所指向的东西,即实际的底层对象。

的结果*this实际上不是引用,而是一个左值,然后它会愉快地绑定到作为函数/运算符的返回值的引用。


至于流是如何做到的,流的大多数运算符重载都是非成员:

std::ostream& operator<<(std::ostream& os, const MyType& obj)
{
   os << obj.someStringRepresentationIGuess();
   return os;
}

那些不是将返回*this

std::ostream& std::ostream::operator<<(int x)
{
    doSomethingToAddIntToBuffer(x);
    return *this;
}

这通常不适用于诸如 之类的运算符+,尽管它适用于+=

class A
{
   A operator+(size_t ofst)
   {
      A tmp = *this;
      tmp += ofst;
      return tmp;
   }

   A& operator+=(size_t ofst)
   {
      // some calculation
      return *this;
   }
};

这是因为约定+适用于对象;否则,以下代码的结果将完全令人惊讶:

int x = 5;
int y = x + 2;

// is y 5 or 7?
// is x 5 or 7?
于 2013-08-20T15:22:25.783 回答
1
return *this;

瞧。

如果要将指针分配给引用,则必须取消引用它。

于 2013-08-20T15:23:07.277 回答
1

您只需返回 *this。除非在空指针上调用成员函数本身,否则它不会为空。

于 2013-08-20T15:23:24.170 回答