C++ PRA值的结果

C++ PRA值的结果,c++,c++17,C++,C++17,国家: prvalue的结果是表达式存储到其上下文中的值。其结果为值V的prvalue有时被称为具有或命名为值V。prvalue的结果对象是由prvalue初始化的对象;用于计算内置运算符的操作数值或具有cv void类型的未丢弃prvalue没有结果对象 “存储到上下文中”是什么意思?这是我不明白的一部分。好吧,有一部分提到了这些上下文 prvalue是一个表达式,其计算初始化对象或 位字段,或计算运算符的操作数值,如 由其出现的上下文指定 C++17中更改的PRValue本身不是值(保证拷贝

国家:

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

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

好吧,有一部分提到了这些上下文

prvalue是一个表达式,其计算初始化对象或 位字段,或计算运算符的操作数值,如 由其出现的上下文指定


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

例如:
auto v=some_func()
其中
some_func
返回一个
std::string
。。然后,
prvalue
some_func()
的结果,上下文是它存储在
v
中,我猜..@Brandon它没有存储,就像初始化一样with@Brandon表达式
some_func()
是prvalue(prvalue是表达式的一个类别);上下文是
v
,prvalue的结果是存储在
v
中的值,因此计算prvalue通常会得到glvalue(当prvalue有一个结果对象时)?@Krystian-通常是。虽然有边缘案例。提示符号是
void()
prvalue。