C ++ 0x TMP编译速度

时间:2011-02-27 13:08:34

标签: compiler-construction c++11 template-meta-programming

这个问题集中在模板元编程构造上。我找到了两篇文章(onetwo,其中两篇文章没有显示确凿证据,但我相信声明)提供的证据表明c ++ 0x原型编译器将指数编译时间转为线性编译时间。

我有一个模糊的暗示,auto,decltype和variadic模板将有一些东西是这个的推动者。我希望看到的是对语言的变化以及实现此目的的编译器技术的全面解释,特别是解释了如何以及为什么。

就我的技术水平而言,我在愤怒中使用了提升TMP库精神,以及一些玩具MPL程序。

1 个答案:

答案 0 :(得分:3)

很明显,第一个编译器的处理速度比第二个慢,并且就像你说的那样evidence for that

/* first */
template<typename A>
void f(A const&);
template<typename A>
void f(A&);

template<typename A1, typename A2>
void f(A1 const&, A2&);
template<typename A1, typename A2>
void f(A1&, A2 const&);
template<typename A1, typename A2>
void f(A1 const&, A2 const&);
template<typename A1, typename A2>
void f(A1&, A2&);

// ...

/* second */
template<typename ...T>
void f(T &&...);

我知道在C ++中没有完全通用的auto的解决方法。模拟auto需要数百行甚至数千行代码(参见boost.typeof),然后它仍然不是通用的。与decltype相同。