2

CRTP の使用を検討しているパフォーマンス クリティカルなコードがあります。私の質問は、ほとんどのコンパイラがコードをどの程度最適化できるかということです。特に、コンパイラが(適切な場合に)メソッドをインライン化できるかどうか疑問に思っています。たとえば、次のコードでは:

template <class Derived> 
struct Base
{
    void interface()
    {
        // ...
        static_cast<Derived*>(this)->implementation();
        // ...
    }
};

struct Derived : Base<Derived>
{
    void implementation();
};

への呼び出しと同じパフォーマンスをobject.interface()もたらす呼び出しobject.implementation()

4

2 に答える 2

4

圧倒的に多分。もちろん、確認する方法は 1 つだけです。

于 2011-06-08T17:38:20.480 に答える
3

最適化がオンになっていて、コンパイラがこれをインライン化する価値があると判断した場合は、はい。

動的ディスパッチと比較して CRTP の優れている点は、コンパイラの観点からは通常の関数呼び出しであることです。

于 2011-06-08T17:38:58.103 に答える