C++中,使用模板,对数组进行“编译期间求和”
编译期间求值,将计算提前到编译期间进行,可以最大限度地榨干编译器的潜力,提高程序的运行速度,用Andrei Alexanderescu的话说就是“时间花在编译期,就某种意义来说这是‘免费的’”(《C++设计新思维》P55)。所以就有了对数组在编译期间求和的需求。
先上代码,再解释:
cout<<SumArrInCompilePhaseCls<-1>::SUM<<endl;//数组下标为负cout<<SumArrInCompilePhaseCls<5>::SUM<<endl;//数组上界越界
正文完。
参考资料:
1、《C++设计新思维》,Andrei Alexanderescu著,侯捷、於春景译。
2、C++模板元编程技术与应用
3、荣威老师写的其他文章或书籍
4、C++ 的MetaProgramming 入门篇
注意:
以上代码在VS2005和G++中都能编译通过,但是只有G++编译出来的程序才能运行出正确结果(15),VS2005中的结果是错误的(5),原因还不清楚,如果您知道VS2005计算错误的原因,请及时留言通知我,我会非常感激您的!