当我收到一条代码审查评论时说了虚函数不必是内联的,这是我遇到的问题。
我认为内联虚拟函数可以在直接在对象上调用函数的情况下派上用场。但是我想到的反驳是-为什么要定义虚拟然后使用对象来调用方法?
最好不要使用内联虚拟函数,因为它们几乎从未扩展过?
我用于分析的代码段:
class Temp
{
public:
virtual ~Temp()
{
}
virtual void myVirtualFunction() const
{
cout<<"Temp::myVirtualFunction"<<endl;
}
};
class TempDerived : public Temp
{
public:
void myVirtualFunction() const
{
cout<<"TempDerived::myVirtualFunction"<<endl;
}
};
int main(void)
{
TempDerived aDerivedObj;
//Compiler thinks it's safe to expand the virtual functions
aDerivedObj.myVirtualFunction();
//type of object Temp points to is always known;
//does compiler still expand virtual functions?
//I doubt compiler would be this much intelligent!
Temp* pTemp = &aDerivedObj;
pTemp->myVirtualFunction();
return 0;
}
pTemp->myVirtualFunction()
可以解决为非虚拟调用,则可以内联该调用。g ++ 3.4.2内联了此引用的调用:TempDerived & pTemp = aDerivedObj; pTemp.myVirtualFunction();
您的代码不是。