【发布时间】:2015-12-19 15:41:22
【问题描述】:
假设我有如下的类设置:
class A {
public:
virtual void foo() { printf("default implementation\n"); }
};
class B : public A {
public:
void foo() override { printf("B implementation\n"); }
};
class C : public B {
public:
inline void foo() final { A::foo(); }
};
int main(int argc, char **argv) {
auto c = new C();
c->foo();
}
一般来说,对c->foo() 的调用可以去虚拟化并内联到printf("default implementation") 调用吗?这是否有保证,例如在 gcc 中?我的直觉是 A::foo() 是非虚拟的,因为该类是明确指定的,因此 printf 将始终被内联。
【问题讨论】: