选项
A.
A.constexpr int constexpr_var1 = 3 + const_var1 * 4;
B.
B.constexpr int constexpr_var2 = 3 + nonconst_var * 4;
C.
C.constexpr int constexpr_var3 = 3 + const_var2 * 4;
正确答案:
名词解析
constexpr的变量的值必须是编译器在编译的时候就可以确定的。上例中因为nonconst_var的值在语法上来讲,运行期间可能被更改,所以编译期间无法确定,不属于常数表达式。因为const_var2是由非常数表达式来初始化的,所以const_var2也不是常数表达式。但const_var2本身的声明,定义及初始化是合法的。constexpr比const更严格,用来初始化constexpr_var2和constexpr_var3的也都不是常数表达式,所以他们的定义都是错误的。