我在阅读有关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(我的解释)。 - 此外,引用被认为比指针更安全(因为我们无法使用流浪指针来破坏内存)。
- 第三,访问引用(
.
)的语法比访问指针(->
或(*)
)更好一些,也更短。
_AFXWIN_INLINE HWND CWnd::GetSafeHwnd() const { return this == NULL ? NULL : m_hWnd; }
this
总是评估为true
?