我最近正在学习C++ 11的新功能。但是,我不完全了解右值。

考虑以下代码:

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

string newText = getText();

调用getText()会创建一个r值,该值会复制到newText变量中。但是这个右值到底存储在哪里?复制后会发生什么?

最佳答案



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



这取决于编译器在哪里存储临时文件。该标准仅指定其生命周期。通常,将其视为自动变量,存储在寄存器或函数的堆栈框架中。



临时项的生命期延长到创建它的全表达式的末尾(除非它用于初始化参照,在这种情况下,它的持续时间与该参照一样长)。因此在这里,使用它初始化newText后立即将其销毁。

08-16 10:08