我最近在学习新的C ++ 11功能。但是,我并不完全了解rvalues的一个方面。
请考虑以下代码:
string getText ()
{
return "Fabricati diem";
}
string newText = getText();
致电getText()
会创建一个复制到newText
变量的r值。但这个右值究竟存储在哪里?复制后会发生什么?
答案 0 :(得分:11)
调用getText()创建一个r值,该值复制到newText变量。
它可能会创造一个临时的;但这是允许copy elision的一种情况,因此newText
更有可能由函数return直接初始化,而不是临时的。
但是这个左值确实存储在哪里?
由编译器决定存储临时存储的位置;标准仅指定其生命周期。通常,它将被视为自动变量,存储在寄存器或函数的堆栈框架中。
复制后会发生什么?
临时的生命周期延伸到创建它的全表达式的末尾(除非它用于初始化引用,在这种情况下,它持续与该引用一样长)。所以在这里,它在使用它初始化newText
之后立即被销毁。