有人可以解释一下:
对非静态成员函数的调用具有隐藏参数,该参数可在成员函数的定义中作为
*this
访问。对于myClass
的成员函数,隐藏参数通常为MyClass&
类型(对于非const成员)。鉴于它具有指针类型,这有点令人惊讶。如果将这相当于现在的*this
那就更好了。但是,在引用类型是语言的一部分之前,这是C ++早期版本的一部分,并且在添加引用类型时,过多的代码已经依赖于它作为指针
谢谢!
答案 0 :(得分:1)
这个例子:
class C
{
public:
int i;
void f(int j) { i = j; }
};
...
C c;
c.f(1);
编译器在某种程度上(不完全)解释这个:
class C
{
public:
int i;
};
void C_f(C *this, int j) { this->i = j; }
...
C c;
C_f(&c, 1);
这就是全部。这些方法与对象中的变量数据分开。
文本的其余部分仅说明了为什么使用指针而不是引用C &p
。
这样的事情也是可能的:
class C
{
public:
int i;
};
void C_f(C &this, int j) { this.i = j; }
...
C c;
C_f(c, 1);
IOW使用引用而不是指针=>没有手工处理地址等
但事实上,this
只是对象的地址/指针。由于历史原因。