constexpr
关键字是在C++11中引入的,同时也引入了对应的“常量表达式”概念。然而,在C++98/c++03中隐含着这个概念,因为数组声明需要一个常量表达式。
```// valid:
int a[sizeof(int)];
int b[3+7];
int c[13/4];
const int n = 3;
int d[n];
// invalid:
int m = 4;
int e[m];
还有其他"常量表达式",即可以在编译时评估的表达式;其中一个例子是模板参数。
对于 C++11 之前的版本,在 C++98/03 标准或其他地方是否存在以下内容?
- 需要常量表达式的语法结构的完整列表(例如数组声明和模板实例化)
- 规定这些常量表达式的规则(可能只是将上述列表中的项目映射到标准中的定义)
gcc
和clang
来说,这将是-pedantic
。 - Shafik Yaghmourg++
编译int e[m];
而没有警告或错误。 - Kyle Strand