首页 > 编程语言 > 详细

C++ metaprogramming Hellow

时间:2021-08-15 11:28:37      阅读:12      评论:0      收藏:0      [点我收藏+]

example 1:

 1 template<size_t N>
 2 struct Fac {
 3     enum {
 4         value = Fac<N - 1>::value +N,
 5     };
 6 };
 7 
 8 template<>
 9 struct Fac<0> {
10     enum {
11         value = 0,
12     };
13 };

 

example 2:

 1 template<size_t N>
 2 struct Fac1 {
 3     
 4     static constexpr size_t    value = Fac1<N - 1>::value + N;
 5 };
 6 
 7 template<>
 8 struct Fac1<0> {
 9     
10     static constexpr size_t    value = 0;
11 };

 

example 3:

 1 template<size_t N>
 2 struct SumUp {
 3     enum {value = SumUp<N-1>::value + N};
 4 };
 5 
 6 template<>
 7 struct SumUp<0> {
 8     enum { value = 0 };
 9 };
10 
11 template<size_t N>
12 struct Fac {
13     enum {
14         value = Fac<N - 1>::value +N,
15     };
16 };

 

The most significant difference (since C++17 avoids the need for an out-of-class definition for the static data member) is that enumerators are instantiated along with the containing class, whereas static data members are instantiated only when needed. (Note, however, that MSVC, at least, doesn’t always properly defer them.)

 

这其实是因为常量表达式最初只能用enum来声明,但后来(实际上是C++98)允许在类内部初始化static int常量:

C++ metaprogramming Hellow

原文:https://www.cnblogs.com/rattanlan/p/15142521.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!