【发布时间】:2016-01-07 21:33:55
【问题描述】:
我觉得很奇怪,与未使用的普通函数不同,未使用的虚函数仍然必须定义。我对在创建类对象时创建的隐式 vtables 和 vpointers 有所了解 - 这在某种程度上回答了这个问题(必须定义函数以便指向可以定义虚函数),但这会使我的查询更进一步。
如果根本不可能调用虚函数,为什么还需要为函数创建 vtable 条目?
class A{
virtual bool test() const;
};
int main(){
A a; //error: undefined reference to 'vtable for A'
}
即使我声明了A::test(),它也从未在程序中使用过,但它仍然会引发错误。编译器可以不运行程序并实现test() 从未被调用 - 因此不需要 vtable 条目吗?或者这是对编译器的不合理期望?
【问题讨论】:
-
你不能实例化一个虚拟类。但是创建一个 null 函数或仅返回其声明类型的常量的函数是微不足道的。
标签: c++ function virtual definition