rvalues在C ++中存储在哪里?

时间:2015-01-08 13:43:14

标签: c++ rvalue-reference

我最近在学习新的C ++ 11功能。但是,我并不完全了解rvalues的一个方面。

请考虑以下代码:

string getText ()
{
    return "Fabricati diem";
}

string newText = getText();

致电getText()会创建一个复制到newText变量的r值。但这个右值究竟存储在哪里?复制后会发生什么?

1 个答案:

答案 0 :(得分:11)

  

调用getText()创建一个r值,该值复制到newText变量。

它可能会创造一个临时的;但这是允许copy elision的一种情况,因此newText更有可能由函数return直接初始化,而不是临时的。

  

但是这个左值确实存储在哪里?

由编译器决定存储临时存储的位置;标准仅指定其生命周期。通常,它将被视为自动变量,存储在寄存器或函数的堆栈框架中。

  

复制后会发生什么?

临时的生命周期延伸到创建它的全表达式的末尾(除非它用于初始化引用,在这种情况下,它持续与该引用一样长)。所以在这里,它在使用它初始化newText之后立即被销毁。