为什么'这个'是一个指针而不是一个参考?
我正在阅读这个问题的答案C ++的优点和缺点,并在阅读评论时产生了疑问。
程序员们经常发现它让人困惑,“this”是一个指针,但不是一个参考。 另一个困惑是为什么“hello”不是std :: string类型,而是求值为char const *(pointer)(在数组到指针转换之后) - Johannes Schaub - litb 08年8月22日在1:56
这只表明它不使用与其他(以后)语言相同的约定。 - le dorfier 08年12月22日在3:35
尽管如此,我将这个“这个”称为一个非常微不足道的问题。 哎呀,感谢在我的未定义行为的例子中发现了一些错误。 :)虽然我不明白关于尺寸的信息与第一个中的任何内容有关。 一个指针是不允许指向外部分配的内存 - jalf 12年12月22日在4:18
这是一个不断的倾向者吗? - yesraaj 12年12月22日在6:35
如果方法是const int getFoo()const,则这可以是常量; < - 在getFoo的范围内,“this”是常量,因此是只读的。 这可以防止错误,并为调用者提供一定程度的保证,使得对象不会改变。 - 道格T. 08年12月22日在16:42
你不能重新分配“这个”。 即你不能做“this =&other;”,因为这是一个右值。 但是这是T *类型,而不是T型常量。 即它是一个非常量指针。 如果你在一个const方法中,那么它是一个指向const的指针。 T const。 但指针本身是nonconst - 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
是一个参考将是有意义的:
More Effective C++
考虑Item 1
:当确保我们有一个有效的对象,即不是NULL(我的解释)时,使用引用。 .
)的语法比访问指针( ->
或(*)
)要好一些,也比访问指针短一些。 当语言第一次发展时,在真正用户的早期版本中,没有引用,只有指针。 添加操作符重载时添加了引用,因为它要求引用一致地工作。
其中一个用途this
是一个目标是获得一个指向自身。 如果它是一个参考,我们必须写&this
。 另一方面,当我们编写一个赋值运算符时,我们必须return *this
,这看起来更简单,因为return this
。 所以,如果你有一个空白的石板,你可以以任何方式辩论。 但是,C ++逐渐演化,以响应用户社区的反馈(如最成功的东西)。 向后兼容的值完全淹没从所产生的较小的优点/缺点this
作为参考或指针。
晚会有点晚...直接从马的嘴里,这是Bjarne Stroustrup不得不说的话(这基本上是从“C ++设计与演变”书中重复出现的):
为什么“这个”不是一个参考?
因为在引用被添加之前,“this”被引入到C ++中(实际上是带有类的C)。 另外,我选择“this”来遵循Simula的用法,而不是(后来的)Smalltalk使用“self”。
C ++标准规定
9.3.2 / 1
在非静态(9.3)成员函数的主体中,关键字this是一个非左值表达式,其值是调用该函数的对象的地址。 X类的成员函数中的类型是X *。 如果成员函数声明为const,则其类型为const X *,如果成员函数声明为volatile,则其类型为volatile X *,并且如果成员函数声明为const volatile,则其类型为const挥发性X *。
但在其他参考文献中,却发现了其他的东西......所以有人主动向Stroustrup先生发送了一封邮件。 随后的对话可以在这里找到。
链接地址: http://www.djcxy.com/p/20781.html