为了账号安全,请及时绑定邮箱和手机立即绑定

为什么“ this”是指针而不是引用?

为什么“ this”是指针而不是引用?

C++
蝴蝶刀刀 2019-12-11 09:09:24
我在阅读有关C ++优缺点的问题的答案,并在阅读注释时遇到了疑问。程序员经常发现“ this”是一个指针而不是一个引用令人困惑。另一个困惑是为什么“ hello”不是std :: string类型,而是求值为char const *(指针)(在数组到指针的转换之后)– Johannes Schaub-litb 08年12月22日在1:56那仅表明它没有使用与其他(后来的)语言相同的约定。– le dorfier 08年12月22日在3:35不过,我将“这个”问题称为一个琐碎的问题。糟糕,感谢您在我的未定义行为示例中发现了一些错误。:)尽管我不了解有关尺寸的信息与第一个信息有关。完全不允许指针指向已分配的内存之外– jalf 08年12月22日在4:18这是持续不断的痛苦吗?– yesraaj 08年12月22日下午6:35如果方法是const int getFoo()const,则它可以是常量。<-在getFoo的范围内,“ this”是常量,因此是只读的。这样可以防止错误,并为调用者提供一定程度的保证,即该对象不会更改。– Doug T. 08年12月22日在16:42您不能重新分配“此”。即您不能执行“ this =&other;”,因为这是一个右值。但这是T *类型,而不是T const类型。即它是一个非恒定指针。如果您使用的是const方法,则它是指向const的指针。T常量 但指针本身是非常量– Johannes Schaub-litb 08年12月22日在17:53像这样思考“ this”:#define this(this_ + 0),其中编译器创建“ this_”作为指向对象的指针,并使“ this”成为关键字。您不能分配“ this”,因为(this_ + 0)是一个右值。当然不是这样的(没有这样的宏),但是它可以帮助理解它– Johannes Schaub-litb 08年12月22日在17:55我的问题是,为什么this指针不是引用?使其成为指针有任何特殊原因吗?为什么this要成为引用会更有意义:考虑Item 1来自More Effective C++:使用引用时,可以保证我们有一个有效的对象,即不是一个NULL(我的解释)。此外,引用被认为比指针更安全(因为我们无法使用流浪指针来破坏内存)。第三,访问引用(.)的语法比访问指针(->或(*))更好一些,也更短。
查看完整描述

3 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

当该语言第一次发展时,在具有实际用户的早期版本中,没有引用,只有指针。添加操作员重载时添加了引用,因为它需要引用才能一致地工作。

的用途之一this是使对象获得指向自身的指针。如果是参考,我们必须写&this。另一方面,当我们编写一个赋值运算符时,我们必须这样做return *this,它看起来更简单return this。因此,如果您的菜板空白,则可以选择其中任何一种方式。但是C ++逐渐发展以响应用户社区的反馈(例如最成功的事物)。向后兼容性的价值完全压倒了由于this作为参考或指针而产生的次要优点/缺点。



查看完整回答
反对 回复 2019-12-12
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

因为在添加引用之前,“ this”已引入C ++(实际上是带有类的C)。另外,我选择“ this”来遵循Simula的用法,而不是(后来的)Smalltalk对“ self”的用法。



查看完整回答
反对 回复 2019-12-12
?
精慕HU

TA贡献1845条经验 获得超8个赞

C ++标准指出


9.3.2 / 1


在非静态(9.3)成员函数的主体中,关键字this是一个非左值表达式,其值是为其调用该函数的对象的地址。在类X的成员函数中,此类型为X *。如果将成员函数声明为const,则其类型为const X *;如果将成员函数声明为volatile,则其类型为volatile X *;如果将成员函数声明为const volatile,则其类型为const。易失X *。


但是在其他参考文献中,发现了其他东西。于是有人主动出击并给斯特劳斯特鲁普先生发了邮件。随后的对话可以在这里找到。



查看完整回答
反对 回复 2019-12-12
  • 3 回答
  • 0 关注
  • 501 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信