C++ const&绑定到临时对象

Ale*_*man 1 c++

请考虑以下代码:

 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?

Que*_*tin 6

只有在直接绑定对prvalue的引用时才会发生生命周期扩展.
在您的情况下,表达式的类型Abc().doIT()Abc&(左值引用),而不是Abc.
这不是prvalue,因此终身延期不适用.