ทำไมมันไม่ได้รับอนุญาตให้รับการอ้างอิงที่ไม่ใช่ const ไปยังวัตถุชั่วคราวซึ่งฟังก์ชั่นgetx()
ส่งกลับ? เห็นได้ชัดว่านี่เป็นสิ่งต้องห้ามตามมาตรฐาน C ++ แต่ฉันสนใจในวัตถุประสงค์ของข้อ จำกัด ดังกล่าวไม่ใช่การอ้างอิงถึงมาตรฐาน
struct X
{
X& ref() { return *this; }
};
X getx() { return X();}
void g(X & x) {}
int f()
{
const X& x = getx(); // OK
X& x = getx(); // error
X& x = getx().ref(); // OK
g(getx()); //error
g(getx().ref()); //OK
return 0;
}
- เป็นที่ชัดเจนว่าอายุการใช้งานของวัตถุไม่สามารถเป็นสาเหตุได้เนื่องจากการอ้างอิงคงที่ไปยังวัตถุนั้นไม่ได้ถูกห้ามตามมาตรฐาน C ++
- เป็นที่ชัดเจนว่าวัตถุชั่วคราวไม่คงที่ในตัวอย่างด้านบนเนื่องจากอนุญาตให้เรียกใช้ฟังก์ชันที่ไม่คงที่ได้ ตัวอย่างเช่น
ref()
สามารถแก้ไขวัตถุชั่วคราว - นอกจากนี้
ref()
ให้คุณหลอกคอมไพเลอร์และรับลิงก์ไปยังวัตถุชั่วคราวนี้และช่วยแก้ปัญหาของเรา
นอกจากนี้:
พวกเขากล่าวว่า "การกำหนดวัตถุชั่วคราวให้กับการอ้างอิง const จะยืดอายุการใช้งานของวัตถุนี้" และ "ไม่มีการพูดถึงการอ้างอิงที่ไม่ใช่ const" ฉันมีคำถามเพิ่มเติม การมอบหมายต่อไปนี้ช่วยยืดอายุการใช้งานของวัตถุชั่วคราวหรือไม่?
X& x = getx().ref(); // OK