我在查看虚函数和虚表时产生了疑问。 假设我有如下代码:
class base
{
public:
virtual void fun(){}
};
class derived : private base
{
public:
void fun(){}
};
使用作用域规则,当基类派生为私有(private)时,它的所有成员都成为派生类的私有(private)成员。编译器插入的 vptr(指向 vtable 的指针)是否也会成为派生类的私有(private)?
最佳答案
它保留了它的函数 ptr 条目的 vtable,尽管从 private
或 public
的角度谈论 vtable 是“不恰当的” ,因为它是一个编译器细节,所以它将始终存在并且是“public
”。
为了进一步扩展这一点,我不熟悉关于此事的规范,但我相信(基于查看来自不同编译器的大量生成的 C/C++ 代码汇编)函数在虚拟中的单态化,即使不需要专门化(在运行时或其他方面),也是被禁止的。
关于c++ - 当基类私有(private)派生时,编译器插入的 vptr 是否变为私有(private)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36630492/