为什么我的编译器只针对虚拟机坚持使用未使用的函数定义?

时间:2016-12-22 15:14:22

标签: c++ function virtual definition declare

你可以在类中声明许多你喜欢的函数,但是当我没有使用和未定义时,我得到的唯一警告就是一点绿色的波形。我理解这一点。

我不明白的是,如果我将未使用的功能设为虚拟,那么我必须定义该功能,即使我没有调用它。但是,这只有在我实例化该类时。所以在下面:

struct Animal
{
    void unusedFunc();          // <--- Regardless of whether class is instantiated, this does not need to be defined unless it is called
    virtual void unusedVirtualFunc(); // <--- Has to be defined whether or not it is called, but only if this class is instantiated.
};

int main()
{
    Animal dog1;          // <--- This line now means the virtual function has to be defined. Doesn't affect the non-virtual function at all.
}

一旦我添加了虚拟关键字,我的类就会增长到8个字节(vtable指针)。前往vtable指针指向的任何地方我想象我到达vtable,它具有执行特定于对象的函数所需的指令,在运行时识别,但我不能看到对此函数定义的需要完全在vtable。对不起,如果这是一个显而易见的问题。

另外,我在Visual Studio上。

编辑:这是一些可编辑的代码:

struct Animal
{
    void unusedFunc();
    virtual void unusedVirtualFunc();
};


int main()
{
    Animal dog1;
}

0 个答案:

没有答案