Joh*_*ane 5 c++ language-lawyer c++14 c++17
[conv]/6(重点是我的):
任何隐式转换的效果都与执行相应的声明和初始化,然后使用临时变量作为转换的结果相同。如果 T 是左值引用类型或函数类型 ([dcl.ref]) 的右值引用,则结果为左值,如果 T 是对象类型的右值引用,则结果为 xvalue,否则为 prvalue。表达式 e 用作泛左值当且仅当初始化将其用作泛左值。
在此特定段落的上下文中,上面突出显示的声明的含义是什么?
该句子的目的是澄清,像i(wherei是变量) 这样的表达式不会在i立即转换为纯右值的上下文中被错误地视为左值。
例如,在
int main() {
const int j = 0;
constexpr int i = j;
}
Run Code Online (Sandbox Code Playgroud)
j如果将第二个定义视为左值,则其格式不正确,因为j它不是常量表达式的允许结果。然而,j被用作纯右值,因为初始化将其用作纯右值,因此链接段落中的其他规则适用(并且定义格式良好)。