我在收到代码审查评论时遇到了这个问题,评论中说虚函数不需要是内连的。
我曾认为,在直接调用对象的函数中,内联虚函数可能会派上用场。但我想到了反驳的论点——为什么要定义虚函数,然后使用对象调用方法呢?
由于它们几乎永远不会被扩展,所以最好不要使用内联虚函数吗?
我用于分析的代码段:
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();
但是你的代码没有被内联。 - mip