我正在阅读这个问题C++ 利弊的答案,并在阅读评论时遇到了这个疑问。
程序员经常发现“this”是指针而不是引用令人困惑。另一个困惑是为什么“hello”不是 std::string 类型,而是计算为 char const*(指针)(在数组到指针转换之后) - Johannes Schaub - 2008 年 12 月 22 日 1:56 这只表明它没有使用与其他(后来的)语言相同的约定。’ le dorfier 2008 年 12 月 22 日 3:35 不过,我将“这个”事情称为一个非常微不足道的问题。哎呀,感谢您在我的未定义行为示例中发现了一些错误。:) 虽然我不明白关于大小的信息与第一个中的任何内容有什么关系。根本不允许指针指向分配的内存之外 - jalf 2008 年 12 月 22 日 4:18 这是一个不断的指针吗?’yesraaj 2008 年 12 月 22 日在 6:35 如果方法是 const int getFoo() const; 这可以是常量 <- 在 getFoo 的范围内,“this”是常量,因此是只读的。这可以防止错误并为调用者提供一定程度的保证,即对象不会更改。’Doug T. 2008 年 12 月 22 日 16:42 你不能重新分配“这个”。即你不能做“this = &other;”,因为这是一个右值。但这是 T* 类型,而不是 T const 类型。即它是一个非常量指针。如果你在一个 const 方法中,那么它是一个指向 const 的指针。常数。但指针本身是非常量的 - Johannes Schaub - 2008 年 12 月 22 日 17:53 像这样想“this”:#define this (this_ + 0) 其中编译器创建“this_”作为指向对象的指针,并使“this”成为关键字。您不能分配“this”,因为 (this_ + 0) 是一个右值。当然不是这样(没有这样的宏),但它可以帮助理解它 - Johannes Schaub - 2008 年 12 月 22 日 17:55
程序员经常发现“this”是指针而不是引用令人困惑。另一个困惑是为什么“hello”不是 std::string 类型,而是计算为 char const*(指针)(在数组到指针转换之后) - Johannes Schaub - 2008 年 12 月 22 日 1:56
这只表明它没有使用与其他(后来的)语言相同的约定。’ le dorfier 2008 年 12 月 22 日 3:35
不过,我将“这个”事情称为一个非常微不足道的问题。哎呀,感谢您在我的未定义行为示例中发现了一些错误。:) 虽然我不明白关于大小的信息与第一个中的任何内容有什么关系。根本不允许指针指向分配的内存之外 - jalf 2008 年 12 月 22 日 4:18
这是一个不断的指针吗?’yesraaj 2008 年 12 月 22 日在 6:35
如果方法是 const int getFoo() const; 这可以是常量 <- 在 getFoo 的范围内,“this”是常量,因此是只读的。这可以防止错误并为调用者提供一定程度的保证,即对象不会更改。’Doug T. 2008 年 12 月 22 日 16:42
你不能重新分配“这个”。即你不能做“this = &other;”,因为这是一个右值。但这是 T* 类型,而不是 T const 类型。即它是一个非常量指针。如果你在一个 const 方法中,那么它是一个指向 const 的指针。常数。但指针本身是非常量的 - Johannes Schaub - 2008 年 12 月 22 日 17:53
像这样想“this”:#define this (this_ + 0) 其中编译器创建“this_”作为指向对象的指针,并使“this”成为关键字。您不能分配“this”,因为 (this_ + 0) 是一个右值。当然不是这样(没有这样的宏),但它可以帮助理解它 - Johannes Schaub - 2008 年 12 月 22 日 17:55
我的问题是,为什么this指针不是引用?使它成为指针的任何特殊原因?
this
一些进一步的论点为什么this作为参考是有意义的:
Item 1
More Effective C++
.
->
(*)
当语言第一次发展时,在真正用户的早期版本中,没有引用,只有指针。添加运算符重载时添加了引用,因为它需要引用才能始终如一地工作。
的用途之一this是让对象获得指向自身的指针。如果它是一个参考,我们必须写&this. 另一方面,当我们编写赋值运算符时,我们必须使用return *this,这看起来更简单return this。所以如果你有一张白纸,你可以用任何一种方式争论。但是 C++ 逐渐演变为响应来自用户社区的反馈(就像大多数成功的事情一样)。向后兼容性的价值完全压倒了this作为引用或指针的次要优势/劣势。
&this
return *this
return this