ทำไมสิ่งนี้:
#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;
}
ให้ผลลัพธ์จาก:
คำตอบคือ:
แทน:
คำตอบคือ: สี่
SandBox::member
จะอ่านสตริงชั่วคราวยังมีชีวิตอยู่
string("four")
ถูกทำลายในตอนท้ายของการแสดงออกเต็มรูปแบบและไม่ใช่หลังจากตัวSandbox
สร้างออก? คำตอบของ Potatoswatter กล่าวว่ามีข้อผูกมัดชั่วคราวกับสมาชิกอ้างอิงใน ctor-initializer ของ constructor (§12.6.2 [class.base.init]) ยังคงมีอยู่จนกว่าตัวสร้างจะออก
cout << "The answer is: " << Sandbox(string("four")).member << endl;
มันก็จะรับประกันได้ว่าจะทำงาน