如何*返回隐式返回引用

时间:2013-06-15 21:57:14

标签: c++ object pointers reference instances

this是成员函数隐式接收的对象/实例的const ptr,那么return *this如何返回引用?

据我所知,一个取消引用变量的指针意味着它保存了它的内存地址,所以return *this应该返回由这个const指针取消引用的值,这是什么?一个对象?

另外,为什么你不能做这样的事情:

Calc cCalc;
cCalc.Add(5).Sub(3).Mult(4);

没有所有成员函数到return *this

我想知道指针和引用如何处理对象/实例。

2 个答案:

答案 0 :(得分:1)

让我们试着解开:

  

这是成员函数隐式接收的对象/实例的const ptr

成员函数确实隐式接收此指针。类型是T *或const T *,具体取决于成员函数签名 - 您在const之后获得const放置const关键字。

  

那么return *会如何返回引用?

*这取消引用指针,从而分别创建类型为T或const T的左值。如果您的问题意味着您如何获得T&来自*这个在const funstion中,你没有的答案,那个尝试将是不正确的代码。

  

据我所知,一个取消引用变量的指针意味着它保存了它的内存地址,所以返回*这应该返回由这个const指针取消引用的值,这是什么?一个对象?

*这表示实例。它是左值表达式。所以你可以得到它的地址agan(提供与此相同),或者可以将它绑定到引用 - 包括返回的情况。

如果函数返回Calc而不是Calc&或返回一些不同于* this的对象 - 但随后计算结果将最终出现在那个地方。不是你期望的地方:在cCalc。

就目前而言,当所有三个函数都返回*时,首先在此处添加take& cCalc,并返回cCalc。对Sub的下一次调用具有相同的情况。并且也是相乘的。

答案 1 :(得分:0)

添加成员没有Sub功能。编译器给出错误。

但是,如果你返回* this,你将返回你自己的对象(不是引用)。现在你有一个可以使用Sub(3)的cCalc对象。 Sub(3)返回你的对象,可以使用Mult(4)。