请考虑以下代码:
class Abc
{
public:
Abc() { std::cout << " ABC::ABC\n"; }
Abc& doIT() { std::cout << " Abc::doIT\n"; return *this; }
~Abc() { std::cout << " ABC::~ABC\n"; }
};
Run Code Online (Sandbox Code Playgroud)
用法:
const Abc& ap = Abc().doIT(); //After this line ap references garbage
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么临时Abc被摧毁而没有绑定到ap?
只有在直接绑定对prvalue的引用时才会发生生命周期扩展.
在您的情况下,表达式的类型Abc().doIT()是Abc&(左值引用),而不是Abc.
这不是prvalue,因此终身延期不适用.