我想知道在使用模板元编程技术时使用静态const和枚举黑客有什么区别.
EX :(斐波那契通过TMP)
template< int n > struct TMPFib {
static const int val =
TMPFib< n-1 >::val + TMPFib< n-2 >::val;
};
template<> struct TMPFib< 1 > {
static const int val = 1;
};
template<> struct TMPFib< 0 > {
static const int val = 0;
};
Run Code Online (Sandbox Code Playgroud)
与
template< int n > struct TMPFib {
enum {
val = TMPFib< n-1 >::val + TMPFib< n-2 >::val
};
};
template<> struct TMPFib< 1 > {
enum { val = …Run Code Online (Sandbox Code Playgroud) 定义在函数内使用的整数常量的典型方法是:
const int NumbeOfElements = 10;
Run Code Online (Sandbox Code Playgroud)
在课堂上使用相同:
class Class {
...
static const int NumberOfElements = 10;
};
Run Code Online (Sandbox Code Playgroud)
然后它可以用作固定大小的数组绑定,这意味着它在编译时是已知的.
很久以前编译器不支持后一种语法,这就是使用枚举的原因:
enum NumberOfElementsEnum { NumberOfElements = 10; }
Run Code Online (Sandbox Code Playgroud)
现在几乎所有广泛使用的编译器都支持函数内const int和类内static const int语法,有没有理由为此目的使用枚举?
const int是不可变的,并且可能不会占用任何空间,具体取决于编译器选择做什么.
如果我宣布const int i = 10,10如果它"可能不占用任何空间" ,那该怎么存储?
假设a int是4个字节,我认为保留至少4个字节来存储10作为a const int.
1)以下代码显示了星期三枚举元素的索引.如何使其打印值而不是索引.
int main()
{
enum day{sunday,monday,tuesday,wednesday,thursday,friday,saturday};
day d=wednesday;
cout<<d;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
2)在什么情况下我更喜欢匿名枚举而不是枚举