我正在考虑使用CRTP的性能关键代码。我的问题是大多数编译器能够在多大程度上优化代码。特别是我想知道编译器是否可以内联(适当时)方法。例如,在以下代码中:
template <class Derived>
struct Base
{
void interface()
{
// ...
static_cast<Derived*>(this)->implementation();
// ...
}
};
struct Derived : Base<Derived>
{
void implementation();
};
调用object.interface()
会产生与调用object.implementation()
答案 0 :(得分:4)
绝大多数可能。当然,只有一种方法可以确定。
答案 1 :(得分:3)
启用优化后,如果编译器认为这值得内联,是的。
与动态调度相比,CRTP有什么好处,从编译器的角度来看,这是一个常规的函数调用。