可能重复:
如何返回可以更改的成员?
我了解到,如果我在分配(以及被调用的方法签名)中使用 const& ,则被引用对象的生命周期会延长到方法结束。
Employee const& getEmp(int a) {
    return Employee(a);
}
Employee const& tmpEmp = m.getEmp(10);  //
... stuff 
//end of scope - tmpEmp valid until here
我写了一个小程序,看到它按预期工作。我的问题不是如何做到这一点?我的问题是关于编译器如何做到这一点?正如您从示例中看到的那样,析构函数在返回后立即被调用,所以我想知道析构函数是如何被调用的,但是 tmpEmp 在析构函数调用之后是有效的?
#include <iostream>
using namespace std;
class Employee {
public:
    Employee() : a(0){
        cout << "c-emp" << a << endl;
    }
    Employee(const Employee& newE) {
        a = newE.a;
        cout << "c-c-emp" << a << endl;
    }
    Employee(int a) : a(a) {
        cout << "c-emp" << a << endl;
    }
    ~Employee() {
        cout << "d-emp" << a << endl;
    }
    int a;
};
class Manager {
public:
    Manager() {}
    ~Manager() {}
    Employee const& getEmp(int a) {
        return Employee(a);
    }
};
int main(int argc, char **argv) {
    Manager m;
    Employee const& tmpEmp = m.getEmp(10);
    cout << "tmpEmp " << tmpEmp.a <<endl;
}
output:
c-emp10
d-emp10   - destructor is called and tmpEmp is still valid? how is that?
tmpEmp 10