A * a = new B();
a->foo();
B が A を派生させ、foo() が仮想関数であるとします。この例は非常に頻繁に発生します。問題は、コンパイラがこれをインライン化しようとしないと言われている場所があり、他の場所では正反対のことが述べられていることです。
個人的には、この呼び出しをインライン化できなかった理由はわかりません。コンパイル時に、どの関数が呼び出されているかを判断するのは非常に簡単だからです。
編集 1:「一般的なケース」を認識しており、コンパイラがインライン化するかどうかを決定するために多くの要因を考慮していることも認識しています。コンパイラがこの特定の呼び出しをインライン化する可能性があるかどうかを尋ねた場合、質問はおそらくより適切に形成されます。
私がこれを尋ねている理由は、 この C++ FAQからの次の特定の引用です。
オブジェクトがポインターまたは参照を介して参照される場合、仮想関数への呼び出しはインライン化できません。これは、呼び出しが動的に解決される必要があるためです。