提问人:Mike 提问时间:10/19/2022 最后编辑:Vlad from MoscowMike 更新时间:10/19/2022 访问量:70
size的行为,将类放入内存空间中?[复制]
sizeof behavior, fit a class within a memory space? [duplicate]
问:
我正在尝试验证类的实例是否适合队列(由 C 库定义),并注意到 sizeof() 没有按照我的想法执行。
#include <iostream>
using namespace std;
class A {
int x, y, z;
public:
A() {}
void PrintSize() { cout << sizeof(this) << endl; }
};
class B : public A {
int a, b, c;
public:
B() {}
void PrintSize() { cout << sizeof(this) << endl; }
};
int main() {
A a;
B b;
a.PrintSize(); // is 8
b.PrintSize(); // is 8
cout << sizeof(a) << endl;
cout << sizeof(b) << endl;
}
返回:
8
8
12
24
我没想到“8”值——为什么在课堂上取值会有所不同?如何验证我定义的类是否适合内存空间,尤其是在编译时?
答:
4赞
Vlad from Moscow
10/19/2022
#1
此表达式
sizeof(this)
给出指针的大小。看来你的意思是相应类的大小this
sizeof( *this )
评论
0赞
Mike
10/19/2022
感谢您的回答,这是一个非常有帮助的回复。
0赞
user4581301
10/19/2022
@Mike 一些额外的文档
。大多数情况下,这是你不需要知道的东西,直到它突然变得重要,但如果你在它变得重要之前知道它,你可以为自己节省大量时间。
评论
this
是一个指针,它将始终具有指针大小。尝试或/。sizeof(*this)
sizeof(A)
sizeof(B)
sizeof *this
sizeof expression
this
this
是一个指针。in 的类型是 ,与 in - 相同。你的问题与指针有关。this
A::PrintSize()
A*
this
B::PrintSize()
B*