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