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

mah*_*esh 2 c++

我没有得到为什么带有成员函数的类的大小是1个字节.在下面的例子中,成员函数是4个字节.

class Test
{
    public:
            Test11()
            {
                int m = 0;
            };
};

int main() 
{
    Test t1;
    int J = sizeof(t1);
    int K = sizeof(t1.Test11());
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这里J变为1字节,K变为4字节.如果K = 4,那么为什么类的大小不是4个字节而是显示1个字节

Cra*_*rks 13

函数本身实际上并未存储在类中.

只有类的数据成员(可能还有它的vtable指针,如果有的话)会影响它的大小.函数本身存在于可执行代码区域中,同一类型的所有实例都使用该函数的一个定义.每次创建类的新实例时,编译器实际上都不会复制出函数体的全部内容.

另外,sizeof(t1.Test11())并不意味着"函数Test :: Test11的可执行代码的大小以字节为单位".它表示"Test :: Test11返回的类型的大小".