C++ - 가상함수의 inline화에 대해서
출처: Web의 어딘가…
혹시 가상함수는 inline 되지 않는다고 생각하는 사람이 있을  것이다. 
경우에 따라서 되기도 하고 안 되기도 한다.
되는 경우는 컴파일 시점에서 어떤 클래스의 가상함수를 사용하는지 알 수 있느냐 이다.
아래 코드의 경우 컴파일 시점에서 Delived 클래스의 Function 멤버를 사용한다는 것을 알 수 있기 때문에 가상함수인 Function은 Inline화 할 수 있다.
struct Base
{
    virtual void Function(void) const = 0:
};
struct Delived
{
    virtual void Function(void) const
    {
         std::cout << "Hello" << std::endl;
    }
};
int main(int, char**)
{
    Delived  delived;
    delived.Function();
    return 0;
}
그럼 아래 코드의 Function 멤버는 Inline화 할 수 있을까? 
물론 된다.
이유는 이것도 컴파일 시점에서 어떤 클래스의 Function을 사용하는지 알 수 있기 때문이다.
struct Base
{
    virtual void Function(void) const = 0:
};
void Call( Base &base )
{
    base.Function();
}
struct Delived:  public Base
{
    virtual void Function(void) const
    {
         std::cout << "Hello" << std::endl;
    }
};
int main(int, char**)
{
    Delived   delived;
    Call( delived );
    return 0;
}
아래의 코드는 Function 멤버를 Inline화 할 수 없다.
struct Base
{
    virtual void Function(void) const = 0:
};
struct Delived:  public Base
{
    virtual void Function(void) const
    {
         std::cout << "Hello" << std::endl;
    }
};
struct Null  : public Base
{
    virtual void Function(void) const{}
};
int main( int argc, char** )
{
    Delived   delived;
    Null        null;
    Base  *base = 1 < argc ? static_cast<Base*>( &delived ) : static_cast<Base*>( &null );
    base->Function();
    return 0;
}
이 글은 2020-09-09에 작성되었습니다.
