为什么功能失重?

时间:2010-05-26 19:42:02

标签: c++

为什么我班上的函数不会改变这个类的大小?这些信息必须存储在某个地方,但在哪里?

3 个答案:

答案 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();
};

微米。