c++ - static const 的地址不是 const 表达式?

标签 c++ static constant-expression

虽然 address-of-static 是下面示例中的常量表达式,但我收到编译器错误(或者这是 C++0x 的新功能?)

class X {
    static const int x;
    enum { y = &x };
};

最佳答案

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

其实GCC给出的错误信息非常明确:

prog.cpp:7: error: ‘X::x’ cannot appear in a constant-expression
prog.cpp:7: error: `&' cannot appear in a constant-expression

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


然而,下面是allowed :

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

不要混淆编译时常量和运行时常量。它们是两种不同的东西。

关于c++ - static const 的地址不是 const 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5567992/

相关文章:

c++ - `*' 不能出现在常量表达式中

c++ - const 指针分配给一个指针

c++ - 文件内容写入队列并统计元音字母的个数

c++ - 将多个数据存储到一个文件中

java - 关于何时可以在类定义中调用静态方法的约束背后的推理

java - 在常量表达式中使用 String.join

c++ - 右值引用和构造函数

static - 防止表格单元格中的文本换行——使用空列

c++ - 可调用在C++类模板中必须是静态的

string - 带有三元运算符的 Java SE 11 字符串最终变量在 Switch Case 表达式中不算作常量变量