constexpr
关键字是在C++ 11中引入的,因为(我认为)是“常量表达式”的相应概念。然而,这种概念被隐式地呈现在C++ 98/C++ 03中,由于数组声明需要恒定的表达式:C++ 11之前的“常量表达式”
// 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];
还有其他的“常量表达式”,即,表达式可以是(和/或必须)在编译时进行评估;一个例子是模板参数。
对于pre-C++ 11,在C++ 98/03标准或其他地方是否存在以下情况?
- 要求常量表达式(例如数组声明和模板实例)的语法结构的完整列表
- 管辖这些常量表达式的规则(大概这也只是从上述列表中,以它们的定义的项目的映射在标准)
等一下!“数组声明需要*常量*表达式”?你为什么这么说? – wallyk 2014-09-24 20:14:49
@wallyk因为这是真的。 – 2014-09-24 20:15:41
@KonradRudolph是编译器扩展的礼物,很多C++开发人员不知道这一点令人惊讶。 – 2014-09-24 20:17:56