对非静态成员函数的调用有一个隐藏参数,可以在成员函数的定义中访问* this

时间:2015-01-13 21:00:01

标签: c++

有人可以解释一下:

  

对非静态成员函数的调用具有隐藏参数,该参数可在成员函数的定义中作为*this访问。对于myClass的成员函数,隐藏参数通常为MyClass&类型(对于非const成员)。鉴于它具有指针类型,这有点令人惊讶。如果将这相当于现在的*this那就更好了。但是,在引用类型是语言的一部分之前,这是C ++早期版本的一部分,并且在添加引用类型时,过多的代码已经依赖于它作为指针

谢谢!

1 个答案:

答案 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只是对象的地址/指针。由于历史原因。