为什么带有成员函数的Class的大小是1个字节..而成员函数是4个字节

时间:2009-10-01 04:11:57

标签: c++

我没有得到为什么带有成员函数的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个字节

2 个答案:

答案 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?