类中的方法是否使用现代c ++编译器内联的“奇怪的重复模板模式”

时间:2011-06-08 17:33:38

标签: c++ compiler-optimization crtp

我正在考虑使用CRTP的性能关键代码。我的问题是大多数编译器能够在多大程度上优化代码。特别是我想知道编译器是否可以内联(适当时)方法。例如,在以下代码中:

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

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

调用object.interface()会产生与调用object.implementation()

相同的效果

2 个答案:

答案 0 :(得分:4)

绝大多数可能。当然,只有一种方法可以确定。

答案 1 :(得分:3)

启用优化后,如果编译器认为这值得内联,是的。

与动态调度相比,CRTP有什么好处,从编译器的角度来看,这是一个常规的函数调用。