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

Kao*_*Kao 9 c++ rvalue-reference

我最近正在学习新的C++ 11功能.但是,我并不完全了解rvalues的一件事.

考虑以下代码:

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

string newText = getText();
Run Code Online (Sandbox Code Playgroud)

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

Mik*_*our 11

调用getText()会创建一个复制到newText变量的r值.

它可能会创造一个临时的; 但这是允许复制省略的一种情况,因此更有可能newText是函数返回直接初始化,没有临时性.

但这个右值究竟存储在哪里?

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

复制后会发生什么?

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