C++ FCD中的R值和临时对象

C++ FCD中的R值和临时对象,c++,c++11,temporary,rvalue,C++,C++11,Temporary,Rvalue,我花了相当长的时间才理解右值和临时对象之间的区别。但现在委员会的最终草案在第75页上写道: 右值[…]是一个x值、一个临时对象或其子对象,或者是一个与对象无关的值 我简直不敢相信我的眼睛。这一定是个错误,对吧 为了澄清,以下是我对术语的理解: #include <string> void foo(std::string&& str) { std::cout << str << std::endl; } int main() {

我花了相当长的时间才理解右值和临时对象之间的区别。但现在委员会的最终草案在第75页上写道:

右值[…]一个x值、一个临时对象或其子对象,或者是一个与对象无关的值

我简直不敢相信我的眼睛。这一定是个错误,对吧


为了澄清,以下是我对术语的理解:

#include <string>

void foo(std::string&& str)
{
    std::cout << str << std::endl;
}

int main()
{
    foo(std::string("hello"));
}
#包括
void foo(std::string&&str)
{

std::cout是的,我同意你的看法。我认为这应该是固定的,我非常尊敬的几个人提出了完全相同的问题。

这并不像听起来那么复杂。我指的是现在已经确定的标准ISO/IEC 14882-2011。第78页说:

xvalue(“到期”值)也指对象,通常在 其生命周期的结束(以便可以移动其资源,例如 示例)。xvalue是特定类型表达式的结果 涉及右值参考(8.3.2)

上面的粗体字是我添加的。标准进一步说明:

右值(历史上称为右值,因为右值可能出现在 赋值表达式的右侧)是一个xvalue,一个 临时对象(12.2)或其子对象,或不是 与对象相关联的


这样,当你玩“涉及R值引用的某些表达式”时,只得到一个XValk。否则,你的临时对象只是临时对象。

你可以考虑通过向COMP.Lang.c++发布一个问题来直接询问标准人。std@Noah我忘记了。让我们看看会发生什么在我看到它之前,有来自C++委员会的人发布了一张白板的照片,显示了“新的表达类型层次”;第二天他又张贴了另一张类似但不同的照片,标题是“好吧,那没持续多久”(现在我很生气,因为我记不起来是谁了!)显然这是个有争议的问题。“有人同意我的观点吗?或者我疯了吗?”:“有人疯了,但那个人不是你。”)删除了嵌入的问题。作为另一个问题提问。