相关疑难解决方法(0)

模板元编程 - 使用Enum Hack和静态Const的区别

我想知道在使用模板元编程技术时使用静态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)

c++ templates metaprogramming

54
推荐指数
2
解决办法
6268
查看次数

是否有理由使用枚举在C++代码中定义单个常量?

定义在函数内使用的整数常量的典型方法是:

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语法,有没有理由为此目的使用枚举?

c++ enums constants

14
推荐指数
5
解决办法
6556
查看次数

const int不占用空间?

在此评论的答案的匿名枚举的使用,奥利奇查尔斯沃思说:

const int是不可变的,并且可能不会占用任何空间,具体取决于编译器选择做什么.

如果我宣布const int i = 10,10如果它"可能不占用任何空间" ,那该怎么存储?

假设a int是4个字节,我认为保留至少4个字节来存储10作为a const int.

c memory int

8
推荐指数
2
解决办法
495
查看次数

C++中的枚举和匿名枚举

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)在什么情况下我更喜欢匿名枚举而不是枚举

c++

5
推荐指数
2
解决办法
7352
查看次数

标签 统计

c++ ×3

c ×1

constants ×1

enums ×1

int ×1

memory ×1

metaprogramming ×1

templates ×1