왜 이런가요?
#include <string>
#include <iostream>
using namespace std;
class Sandbox
{
public:
Sandbox(const string& n) : member(n) {}
const string& member;
};
int main()
{
Sandbox sandbox(string("four"));
cout << "The answer is: " << sandbox.member << endl;
return 0;
}
다음을 출력하십시오.
정답은:
대신에:
답은 : 4
SandBox::member
읽을 때 임시 문자열 은 여전히 살아 있습니다.
string("four")
후가 아니라 전체 표현식의 끝에서 임시 가 파괴되는 이유를 설명해 주 Sandbox
시겠습니까? Potatoswatter의 답변에 따르면 생성자의 ctor-initializer (§12.6.2 [class.base.init])에서 참조 멤버에 대한 임시 바인딩은 생성자가 종료 될 때까지 지속됩니다.
cout << "The answer is: " << Sandbox(string("four")).member << endl;
다면 효과가있을 것입니다.