मैं चैट में निम्न उदाहरण में दिखाया गया था:कौन सा मानक शब्द हमें बताता है कि रीफ-टू-कॉन्स्ट अस्थायी आजीवन विस्तार केवल "एक बार काम करता है"?
#include <iostream>
struct foo { ~foo() { std::cout << "destroying!\n"; } };
const foo& func(const foo& a, const foo&) { return a; }
int main()
{
foo x;
const foo& y = func(foo(), x);
std::cout << "main\n";
}
destroying!
main
destroying!
यह प्रदर्शित करने के लिए कि foo
अस्थायी के जीवनकाल main
की सम्पूर्णता पर लागू नहीं होता दिखाई देता है, भले ही यह हो जाता है उस दायरे में एक ref-to-const
तक बाध्य।
संभवतः, जीवनकाल विस्तार केवल "एक बार काम करता है"; अर्थात, यह लागू होता है जब func
के तर्क शुरू किए जाते हैं, लेकिन लगातार बाइंडिंग के माध्यम से पारित नहीं किया जाता है।
क्या मेरी व्याख्या सही है? यदि ऐसा है (और यदि कोई व्यक्तिगत अनुच्छेद सीधे लागू होता है) मानक व्यवहार क्या है जो इस व्यवहार को परिभाषित करता है?
'func' के लिए दूसरा तर्क क्या है? क्या होता है यदि आप इसे छोड़ देते हैं (और 'x') बंद करते हैं? –
@ कोनराड रुडॉल्फ: यह टेक्स्ट '" मुख्य "के आउटपुट के सापेक्ष विनाश आदेश का प्रदर्शन करने के लिए है, मुझे लगता है। –