我正在阅读这个问题的答案c++的优点和缺点,在阅读评论时得到了这个疑问。
程序员经常会感到困惑,“this”;是指针而不是引用。另一个困惑是为什么“hello”;不是std::string类型,而是计算为char const*(指针)(在数组到指针转换之后)- Johannes Schaub - litb 12月22 '08 at 1:56
这只能说明它不使用与其他(后来的)语言相同的约定。- le dorfier 2008年12月22日3:35
我把它叫做“this”;这是一个非常微不足道的问题。哦,谢谢你在我的未定义行为的例子中发现了一些错误。:)虽然我不明白关于尺寸的信息与第一个有什么关系。一个指针根本不允许指向已分配的内存之外- jalf 12月22日'08 at 4:18
这是一个常量指针吗?- yesraaj 12月22日08年6:35
如果方法为const,则此值可以为常量。<-在getFoo的范围内,"this"为常量,因此为只读。这可以防止错误,并向调用方保证对象不会改变。- Doug T. 2008年12月22日16:42
你不能重新分配“this”。也就是说,你不能用“this = &other;&;”,因为这是一个右值。但这是T*类型,而不是T const类型。也就是说,它是非常量指针。如果你在一个const方法中,那么它是指向const的指针。T常量。但指针本身是非const - Johannes Schaub - litb 12月22日08年17:53
想想“this”;像这样:#define this (this_ + 0),其中编译器创建"this_"作为指向对象的指针,使"this"一个关键字。你不能赋值“this”;因为(this_ + 0)是一个右值。当然不是这样的(没有这样的宏观),但它可以帮助理解它- Johannes Schaub - litb 2008年12月22日17:55
我的问题是,为什么this
是指针而不是引用?把它作为指针有什么特别的原因吗?
一些进一步的论证为什么this
作为引用是有意义的:
Item 1
来自More Effective C++
:当保证我们有一个有效的对象时使用引用,即不是NULL(我的解释)。.
)比访问指针(->
或(*)
)更好、更短。