“this”指针存储在内存中的确切位置?它是在堆栈上、堆中还是数据段中分配的?
#include <iostream>
using namespace std;
class ClassA
{
int a, b;
public:
void add()
{
a = 10;
b = 20;
cout << a << b << endl;
}
};
int main()
{
ClassA obj;
obj.add();
return 0;
}在上面的代码中,我调用了成员函数add(),接收器对象被隐式地作为'this‘指针传递。this在内存中存储在哪里?
发布于 2013-05-16 23:54:44
其他答案很好地解释了典型的编译器如何实现this (通过将其作为隐式的第一个参数传递给函数)。
我认为看看C++ ISO规范明确说明了这一点也很有用。根据C++03 ISO规范,§9.3.2/1:
在非静态(9.3)成员函数体中,关键字
this是一个非左值表达式,其值是为其调用函数的对象的地址。
需要注意的是,this is 不是一个变量-它是一个表达式,就像表达式1 + 2 * 3是一个表达式一样。这个表达式的值被允许存储在几乎任何地方。编译器可能会将它放到堆栈中,并将其作为隐式参数传递给函数,或者它可能会将它放在寄存器中,并且可以想象它会将它放入堆或数据段中。在这里,C++规范有意地为实现提供了一些灵活性。
我认为“语言律师”的答案是“这是完全由实现定义的,而且从技术上讲,this不是一个指针,而是一个计算结果为指针的表达式。”
希望这能有所帮助!
https://stackoverflow.com/questions/16585562
复制相似问题