我了解 this
的作用,但是 *this
和 this
有什么区别?
是的,我已经在我的教科书中搜索并阅读了 *this
,但我就是不明白……
原文由 anon235370 发布,翻译遵循 CC BY-SA 4.0 许可协议
我了解 this
的作用,但是 *this
和 this
有什么区别?
是的,我已经在我的教科书中搜索并阅读了 *this
,但我就是不明白……
原文由 anon235370 发布,翻译遵循 CC BY-SA 4.0 许可协议
this
是指向类对象的指针,在该类对象上调用了非静态成员函数。此外,当用作表达式时, this
的 值类别 是 prvalue 。
当我们在类的对象上调用 非静态成员函数 时,该对象的地址作为该成员函数的第一个参数 隐式 传递。这是可能的,因为每个非静态成员函数都有一个名为 this
的隐式参数,它的类型为 X*
用于非常量成员函数,而 const X*
用于 const 成员函数,其中 X
是某个类。
当我们在 *
this
,结果是指针 this
指向的对象。我们基本上是在 取消引用 this
指针。也就是说, *this
为我们提供了指针 this
指向的对象。换句话说,我们得到了调用非静态成员函数的对象。
此外,当用作表达式时, *this
的值类别是 lvalue 。另外,请注意
表达式的类型 永远 不是引用。
请注意, 左值表达式 与 左值引用 不同。 Marcelo Cantos 的回答和 cigien 的评论似乎混淆了这两个概念。
this
*this
指向调用非静态成员函数的类的对象的指针。取消引用 this
指针的结果。结果是调用非静态成员函数的实际对象。 prvalue 表达式左值表达式
原文由 Jason Liam 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答1.3k 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
4 回答840 阅读
1 回答914 阅读
1 回答949 阅读
1 回答715 阅读
1 回答816 阅读
this
是一个指针,而*this
是一个取消引用的指针。如果您有一个返回
this
的函数,它将是指向当前对象的指针,而返回*this
的函数将是当前对象的“克隆”,分配于堆栈—— 除非 您指定了返回引用的方法的返回类型。一个简单的程序,显示操作副本和引用之间的区别:
输出:
您可以看到,当我们对本地对象的 副本 进行操作时,更改不会持续存在(因为它完全是一个不同的对象),但是对引用或指针进行 操作确实会 保持更改。