右值的结果

Kry*_*n S 6 c++ c++17

[basic.lval]/5状态:

纯右值的结果是表达式存储到其上下文中的值。结果为值 V 的纯右值有时被称为具有或命名为值 V。纯右值的结果对象是由纯右值初始化的对象;用于计算内置运算符的操作数的值或类型为 cv void 的非丢弃纯右值没有结果对象...

“存储到其上下文中”是什么意思?这是我不明白的一部分。

Sto*_*ica 5

好吧,[basic.lval]/1.2提到了这些上下文

纯右值是一个表达式,其计算初始化一个对象或位域,或者计算一个运算符的操作数的值,由它出现的上下文指定。

C++17 中的更改下的纯右值本身并不是值(保证复制省略),而是类似于对象(命名的或临时的)延迟初始化的“指令”。初始化被尽可能晚地延迟,这就是副本被“删除”的方式(但我离题了)。措辞“存储到其上下文中”意味着结果是这些指令为这些对象在各自上下文中的初始化而产生的结果。

  • @KrystianS - 总的来说,是的。尽管存在边缘情况。一个突出的例子是“void()”纯右值。 (4认同)