[conv]/6 中"The expression e is used as a glvalue if and only if the initialization uses it as a glva

What is the exact meaning of the statement "The expression e is used as a glvalue if and only if the initialization uses it as a glvalue" in [conv]/6

本文关键字:if as and glvalue only the glva it uses initialization used      更新时间:2023-10-16

[conv]/6(重点是我的):

任何隐式转换的效果都与执行相应的声明和初始化,然后使用作为转换结果的临时变量。结果是左值,如果T是左值引用类型或对的右值引用函数类型([dcl.ref]),如果T是对对象类型,否则为prvalue表达式e用作glvalue当且仅当初始化将其用作glvalue时

在这一特定段落的背景下,上文强调的陈述的含义是什么?

这句话的目的是澄清,在i立即转换为prvalue的上下文中,像i(其中i是一个变量)这样的表达式不会被错误地视为glvalue。

例如,在中

int main() {
  const int j = 0;
  constexpr int i = j;
}

如果j被认为是glvalue,则第二个定义将是不正确的,因为j不是常量表达式的允许结果。然而,j被用作prvalue,因为初始化使用它作为prvalue,因此链接段落中的另一条规则适用(并且定义格式良好)。