gpt4 book ai didi

c++ - 为什么在调用的赋值析构函数中使用 in const 时,赋值是正确的

转载 作者:搜寻专家 更新时间:2023-10-31 00:18:01 24 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
How to return member that can be changed?

我了解到,如果我在赋值(以及被调用的方法签名)中使用 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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com