【发布时间】:2016-07-11 18:06:15
【问题描述】:
我一直认为,当在 表达式。尽管如此,似乎每次在 表达式 中使用引用时,都会在 [expr.const]/2 的项目符号点 (2.9) 中处理,而不是项目符号点 (2.7)(在 C++14 中,或 C++1z)。
以下面的引用r为例,用于初始化变量j。它是否经过左值到右值的转换?
const int i = 1;
constexpr int& r = i
constexpr int j = r;
根据this answer,引用r 在[expr.const]/2 的项目符号点(2.9) 中处理,而不是在项目符号点2.7 中,正如我所料。这是为什么呢?
【问题讨论】:
-
[expr.const]/2 中的项目符号不会“处理”任何内容。为了使表达式成为核心常量表达式,需要满足每个项目符号。
-
那为什么引用
r不满足项目符号(2.7)?你能解释一下吗?我的意思是为什么 (2.7) 中的子项目之一不满意? -
每个子弹的哪一部分难以理解?你需要满足所有,而不是一个。
-
你看到我上面的编辑了吗?
-
不管你是否满足2.7,你还是要满足2.9、2.10、2.11、2.12,等等……如果不满足2.9,那就不是核心常量表达式,无论是否满足 2.7。
标签: c++ c++14 language-lawyer constexpr c++17