正在初始化C++11中要求为prvalue的表达式

Are initializing expressions required to be prvalues in C++11?

本文关键字:prvalue 表达式 初始化 C++11      更新时间:2023-10-16

在以下示例中:

extern bool b1;
bool b2(b1);

初始化表达式b1是一个左值布尔。

在用于初始化b2之前,是否对其应用左值到右值的转换以将其转换为prvalue?这在标准中有何规定?

是的,执行左值到右值的转换。非类类型的表达式初始化非引用非类类型需要一个prvalue。

这很难从标准文本中明确确定,除非假设这两种情况,然后意识到否定的答案将打破许多其他规则(请参阅odr用法和常量表达式)。将表达式e转换为类型T以及通过表达式e初始化类型T的变量的定义在条款4的序言和条款8.5之间几乎是循环的。