それで、別のスレッドで尋ねられた質問から、私は新しい質問を考えました、そして、答えは私には明白ではありません。
したがって、一時的なものへのconst参照がある場合、一時的なものの存続期間は少なくともconst参照と同じ長さであるというc++ルールがあるようです。しかし、別のオブジェクトのメンバー変数へのローカル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参照が、渡されたメンバーオブジェクトとのライフを通じてそれ自体をバインドしないことを意味しているようです。なんでそうじゃないの?