gpt4 book ai didi

c++ - 变量的常量及其生命周期

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:07:53 30 4
gpt4 key购买 nike

因此来自 a question在另一个线程中问,我想到了一个新问题,答案对我来说并不明显。

所以看起来有一个 c++ 规则说如果你有一个临时的 const 引用,那么临时的生命周期至少与 const 引用一样长。但是,如果您有一个对另一个对象的成员变量的本地 const 引用,然后当您离开作用域时,它会调用该变量的析构函数吗?

所以这里是原始问题的修改程序:

#include <iostream>
#include <string>
using namespace std;

class A {
public:
A(std::string l) { k = l; };
std::string get() const { return k; };
std::string k;
};

class B {
public:
B(A a) : a(a) {}
void b() { cout << a.get(); } //Has a member function
A a;
};

void f(const A& a)
{ //Gets a reference to the member function creates a const reference
stores it and goes out of scope
const A& temp = a;
cout << "Within f(): " << temp.k << "\n";
}

int main() {
B b(A("hey"));

cout << "Before f(): " << b.a<< "\n";

f(b.a);

cout << "After f(): " << b.a.k << "\n";

return 0;
}

所以当我运行这段代码时,我每次都会得到“hey”作为值。这似乎暗示局部 const 引用不会在整个生命周期中将自己与传入的成员对象绑定(bind)。为什么不呢?

最佳答案

b.a 不是临时的,因此它的生命周期不受随后绑定(bind)到它的任何引用的影响。

关于c++ - 变量的常量及其生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10141302/

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