【问题标题】:Are initializing expressions required to be prvalues in C++11? [duplicate]在 C++11 中初始化表达式是否需要是纯右值? [复制]
【发布时间】:2013-08-16 23:10:04
【问题描述】:

在以下示例中:

extern bool b1;
bool b2(b1);

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

在用于初始化b2之前,是否对其应用了左值到右值的转换以将其转换为纯右值?这在标准中的什么地方规定?

【问题讨论】:

    标签: c++ c++11


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-25
      • 1970-01-01
      • 1970-01-01
      • 2015-07-18
      相关资源
      最近更新 更多