【发布时间】:2019-12-14 22:27:25
【问题描述】:
[dcl.constexpr] p10 sentence 3 说:
在任何 constexpr 变量声明中,初始化的完整表达式应为 constant expression
但是,在此声明中:
constexpr int a = 10;
constexpr int b = a;
a 不是常量表达式,因为它是 glvalue 核心常量表达式,但不是permitted result of a constant expression,因为它没有静态存储持续时间,也不是临时对象。
但是,随着左值到右值转换的应用,它将变成一个常量表达式。那么是不是说初始化器不需要是常量表达式,只需要转换后的最终结果呢?
【问题讨论】:
-
没有定义完整表达式的值类别似乎是标准的缺陷。
标签: c++ initialization language-lawyer constexpr constant-expression