对不起,如果代码中有错误。目前正在通过手机撰写。
请考虑以下情形:
class A
{
public:
int funX()
{
return funY()*5;
}
virtual int funY() = 0;
};
class B : public A
// public: A
{
public:
int funY() override final
{
// implementation
}
};
int foo(B& b)
{
return b.funX();
};
在此代码中,编译器具有足够的信息来确定它需要调用B::funY()
而无需虚拟调用它。但是,如果没有final
关键字,情况就不会如此。否则,可以发送可能的类C
的实例,该实例以不同的方式实现funY()
。
编译器是否对其进行了优化?