因此,从另一个线程中提出的问题中,我想到了一个新问题,答案对我来说并不明显。
因此,似乎有一条 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;
}
所以当我运行这段代码时,我每次都会得到“嘿”作为值。这似乎意味着本地 const 引用不会通过传入的成员对象将自己绑定到一生中。为什么不呢?