我没有得到为什么带有成员函数的Class的大小是1个字节..在下面的例子中,成员函数是4个字节。
class Test
{
public:
Test11()
{
int m = 0;
};
};
int main()
{
Test t1;
int J = sizeof(t1);
int K = sizeof(t1.Test11());
return 0;
}
这里J变为1字节,K变为4字节。如果K = 4,那么为什么类的大小不是4个字节而是显示1个字节
答案 0 :(得分:13)
函数本身实际上并未存储在类中。
只有类的数据成员(以及可能的vtable指针,如果有的话)会影响其大小。函数本身存在于可执行代码区域中,同一类型的所有实例都使用该函数的一个定义。每次创建类的新实例时,编译器实际上都不会复制出函数体的全部内容。
此外,sizeof(t1.Test11())
并不意味着“函数Test :: Test11的可执行代码的大小(以字节为单位)”。它表示“Test :: Test11返回的类型的大小”。
答案 1 :(得分:3)
函数实现不包含在类的每个实例中,因此类的实例可以具有0的大小,但实际上不是。 Bjarne Stroustrup在这里写道why is the size of an empty class not zero?