this
是成员函数隐式接收的对象/实例的 const ptr,那么如何 return *this
返回引用?
据我所知,取消引用变量的指针意味着它保存了它的内存地址,所以return *this
应该返回由这个 const 指针取消引用的值,这是什么?一个东西?
另外,为什么你不能做这样的事情:
Calc cCalc;
cCalc.Add(5).Sub(3).Mult(4);
没有所有的成员函数return *this
?
我想知道指针和引用如何处理对象/实例。
让我们尝试解开:
这是成员函数隐式接收的对象/实例的 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 的下一次调用具有相同的情况。和乘也是。
添加成员没有子功能。编译器给出错误。
但是,如果您返回 *this,您将返回您自己的对象(而不是引用)。现在您有了一个可以使用 Sub(3) 的 cCalc 对象。Sub(3) 返回您的对象并可以使用 Mult(4)。