C/C++黑魔法-枚举骇客

枚举的奇淫技巧!
枚举特性中: 枚举必须在编译时建立其所有值,并且其值可用于常量表达式。

1 在旧的编译器中以下代码不能编译通过

1
2
static const int length = 100;
int i[length];

2 利用枚举间接实现

1
2
3
4
struct Body {
enum { length = 100 };
int i[length];
};

3 枚举骇客的由来

  • static const不被编译器作常量支持,这一点令人费解。
  • 在编译器中不能被支持,利用枚举的特性来支持;
  • 枚举特性中:
    枚举必须在编译时建立其所有值,并且其值可用于常量表达式。

4 例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;

struct Body {
enum { length = 100 };
int i[length];
};

int main()
{
cout << "sizeof(Body) = " << sizeof(Body)
<< "sizeof(int[100]) = " << sizeof(int[100]) << endl;

return 0;
}

5 最后

  • 猜猜结果输出是什么?