为什么我班上的函数不会改变这个类的大小?这些信息必须存储在某个地方,但在哪里?
答案 0 :(得分:9)
您可以将成员函数视为与任何其他函数一样,除了它有一个额外的隐藏参数,该参数接受指向调用成员函数的实例的指针。
例如,这个:
class C
{
void f(int i) { }
};
可以(至少在概念上)实施为:
void C_f(C* this, int i) { }
如果它是const成员函数,则隐藏参数将改为const C*
类型。请注意,虚拟成员函数的情况并非如此简单。
答案 1 :(得分:2)
sizeof(TheClass)
仅受类中数据成员的影响,加上vtable(如果有),加上填充字节(如果有)。因此,向您的类添加非虚函数不会影响其大小。如果该类已包含虚函数,则添加第二个函数也不会更改sizeof(TheClass)
。
答案 2 :(得分:-1)
我认为(我大多数时候都会犯错)如果你只在一个类中声明一个非虚函数但没有实现,那么链接器可能会将它们全部一起删除。
class Toto
{
int foo();
};
微米。