가상 기능을 인라인 할 필요가 없다는 코드 검토 의견을 받았을 때이 질문이 있습니다.
인라인 가상 함수는 함수가 객체에서 직접 호출되는 시나리오에서 유용 할 수 있다고 생각했습니다. 그러나 반론은 내 생각에왔다. 왜 가상을 정의하고 객체를 사용하여 메소드를 호출하고 싶을까?
인라인 가상 함수는 거의 확장되지 않으므로 사용하지 않는 것이 가장 좋습니까?
분석에 사용한 코드 스 니펫 :
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();
. 코드가 아닙니다.