这个问题重点关注模板元编程结构。我找到了两篇文章(one 和 two,其中两篇没有提供确凿的证据,但我相信这些说法)提供了证据,表明 c++0x 原型编译器将指数编译时间转变为线性编译时间。
我有一个模糊的暗示,auto、decltype 和可变参数模板将有一些东西是这方面的推动者。我希望看到的是对实现这一点的语言和编译器技术的变化的全面解释,特别是解释如何以及为什么。
就我的技术水平而言,我在愤怒中使用过Boost TMP库精神,以及一些玩具MPL程序。
很明显,编译器处理第一个的速度比第二个要慢,并且正如您所说,有证据。
/* 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
也一样。