2

次があるとします。

class Base
{
__forceinline virtual int A() {return 1;}
}


class Derived: public Base
{
    int A() 
    {
        return 2;
    }
}

派生クラスの関数 A は、明示的に記述しなくても仮想です。派生クラスの関数 A も、明示的に記述せずに __forceinlined になりますか?

4

2 に答える 2

3

まず、仮想的に呼び出される関数はインライン化できません。コンパイラは、呼び出す関数を知るために、最初に vtable ポインターに到達する必要があります。マークされたすべての関数virtualが仮想的に呼び出されるわけではありません - それらはインライン化できます。

その後、__forceinline派生クラスの実装には反映されません。これは、関数ごとに有効な非標準のコンパイラ固有のキーワードです。したがって、インライン化を強制したい場合は、派生クラス関数でキーワードを再度適用する必要があります。繰り返しますが、すべての呼び出しがインライン化されることは保証されません。

于 2011-07-27T10:14:46.357 に答える
2

これは、使用しているコンパイラで文書化する必要がありますが、私にとっては、強制されているかどうかにかかわらず、「インライン性」は継承の契約の一部ではないものです。いいえ、そうすべきではありません。

于 2011-07-27T10:16:38.460 に答える