1

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

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

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

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

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

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

4

2 回答 2

1

让我们尝试解开:

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

成员函数确实隐式地接收这个指针。类型是 T* 或 const T* 取决于成员函数签名——你会得到 const 将 const 关键字放在 () 之后的尾部。

那么 return *this 如何返回一个引用呢?

*this 取消引用指针,从而分别创建 T 或 const T 类型的左值。如果您的问题是指您如何在 const 函数中从 *this 中获得 T&,而您没有回答,那么该尝试将是格式错误的代码。

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

*this 表示实例。它是左值表达式。因此,您可以获取它的地址 agan(提供与此相同),或者可以将其绑定到一个引用——包括返回的情况。

如果函数返回 Calc 而不是 Calc& 或返回与 *this 不同的对象,则实际上可以完成您显示的链接 - 但计算结果最终会出现在那个地方。不是您期望的:在 cCalc 中。

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

于 2013-06-16T09:32:25.797 回答
0

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

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

于 2013-06-15T22:13:11.117 回答