我发现这个答案的输出与使用的gcc编译器的版本不同。
#include<iostream>
using namespace std;
class ABC{
int x;
public:
void show(){
cout<<sizeof (this);
cout<<sizeof (*this);
}
};
int main(){
ABC ob;
ob.show();
return 0;
}
此代码在版本4.9.1中给出了84的输出,并且在前一版本中给出了44的输出。
任何人都可以清楚地向我解释“this”指针背后的概念吗?
答案 0 :(得分:1)
this
指针在N3337 [class.this]中定义:
1
在非静态(9.3)成员函数的主体中,使用关键字this
是一个prvalue表达式,其值是。的地址 调用该函数的对象。 a中this
的类型 类X
的成员函数是X*
。
因此sizeof(this)
没有什么特别之处。正如deviantfan所指出的,您很可能正在观察编译32位程序与64位程序的效果。
GCC -m32
输出44
和84
没有。
答案 1 :(得分:0)
Class是模板,它没有在堆内存中分配任何空间。在main()函数中创建变量ob后,根据类的定义将内存分配给堆内存中的变量ob。内存位置还有一个包含变量元数据的标题空间。 “this”包含已分配内存的地址。
现在不同版本的编译器以不同方式处理这种内存分配。
查看类定义中的函数。 ABC类型变量的所有实例都是相同的。因此,版本可以为函数分配共享空间,而另一个版本可以为每个实例分配空间以占用更多空间。
这可能是差异背后的原因之一。