静态const的地址不是const表达式?

Gio*_*hal 3 c++ static constant-expression

我虽然静态地址是一个常量表达式,如下例所示,但我得到一个编译器错误(或者这是C++ 0x的新增内容?)

class X {
    static const int x;
    enum { y = &x };
};
Run Code Online (Sandbox Code Playgroud)

Naw*_*waz 5

变量的地址(静态或非静态)不是编译时常量.enum需要编译时常量.这就是为什么会出错.

事实上,GCC给出了非常明确的错误信息:

prog.cpp:7:错误:'X :: x'不能出现在常量表达式
prog.cpp中:7:错误:`&'不能出现在常量表达式中

看看自己:http://ideone.com/FJk3C


但是,允许以下内容:

class X {
    static const int x;
    enum { y = sizeof(x) }; //okay. sizeof(x) can be known at compile time!
};
Run Code Online (Sandbox Code Playgroud)

不要将编译时常量与运行时常量混淆.他们是两件不同的事.