C++ “这句话的确切含义是什么?”;当且仅当初始化将表达式e用作glvalue时,表达式e才用作glvalue";在[conv]/6中

C++ “这句话的确切含义是什么?”;当且仅当初始化将表达式e用作glvalue时,表达式e才用作glvalue";在[conv]/6中,c++,c++14,language-lawyer,c++17,C++,C++14,Language Lawyer,C++17,(我的重点是): 任何隐式转换的效果都与执行 相应的声明和初始化,然后使用 作为转换结果的临时变量。结果是一场灾难 如果T是对的左值引用类型或右值引用,则为左值 函数类型([dcl.ref]),如果T是对 对象类型,否则为prvalue表达式e用作 glvalue当且仅当初始化将其用作glvalue时 在本特定段落的上下文中,上面突出显示的语句的含义是什么?该句的目的是澄清像i(其中i是一个变量)这样的表达式在i立即转换为PR值的上下文中不会被错误地视为glvalue 例如,在 int main

(我的重点是):

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


在本特定段落的上下文中,上面突出显示的语句的含义是什么?

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

例如,在

int main() {
  const int j = 0;
  constexpr int i = j;
}
如果将
j
视为glvalue,则第二个定义的格式将不正确,如下所示。但是,
j
用作prvalue,因为初始化将其用作prvalue,因此链接段落中的另一条规则适用(且定义格式良好)。

当且仅当是一个数学术语:glvalue是一个表达式,其求值确定对象、位字段或函数的标识: