C++ 为什么';这';关键字不是C+;中的引用类型+;

C++ 为什么';这';关键字不是C+;中的引用类型+;,c++,this,keyword,C++,This,Keyword,可能的重复项: >代码> C++中的关键字获取指向当前对象的指针。< /P> 我的问题是为什么this的类型是指针类型而不是引用类型。 是否存在此关键字为空的任何条件 我的即时思想是静态函数,但VisualC++至少是足够聪明的,可以发现并报告静态成员函数没有这个“指针”< /> >。这是否在标准中?(可能不是一个完整的答案) 当对象需要使用“危险”删除自身时,总是会出现这种情况 所以它可能是一个指针 M/< P>因为引用直到后来才被添加到C++中。到那时改变它已经太晚了。见斯特劳斯特鲁

可能的重复项:

<> >代码> C++中的关键字获取指向当前对象的指针。< /P> 我的问题是为什么
this
的类型是指针类型而不是引用类型。 是否存在
关键字为
的任何条件

我的即时思想是静态函数,但VisualC++至少是足够聪明的,可以发现并报告<代码>静态成员函数没有这个“指针”< /> >。这是否在标准中?

(可能不是一个完整的答案) 当对象需要使用“危险”删除自身时,总是会出现这种情况

所以它可能是一个指针


M/

< P>因为引用直到后来才被添加到C++中。到那时改变它已经太晚了。

见斯特劳斯特鲁普的

因为在引用添加之前,“这个”被引入到C++(真正的C类中)。此外,我选择“this”是为了遵循Simula的用法,而不是(后来)Smalltalk中“self”的用法


不要复制,完全复制!另一个问题没有解决这里提出的次要问题,比如“这个是否可以为空?”。在回答这个问题的时候,我正在回答这个问题。关于<代码> < < /代码>是否可以为空,答案是否定的,而不是在一个格式良好的程序中。实际上,NUL<代码>这个< /代码>发生了。如果您有一个指向对象的指针,并且指针为null,并且您尝试调用一个方法(例如,
p->method()
),您经常会在该方法中崩溃,因为
null
。我确信编译器会有一些变化。但是
this
在正确的程序中永远不会为空。如果它是引用,您可以
delete&this
delete&this
甚至可能比
delete this
更具优势,因为额外的
&
可能会让您自问是否允许删除当前对象,即是否在堆上动态分配了该对象<代码>删除此项在这方面看起来要低调得多,国际海事组织。为什么要投否决票,这来自于BS(显然)可能有人认为我从重复的问题中复制了答案(事实并非如此,我刚刚在这一秒中发现了它)。
delete this;