निम्नलिखित कोड ठीक काम करता है, लेकिन यह सही कोड क्यों है? Foo() वैध द्वारा लौटाए गए अस्थायी "c_str()" सूचक क्यों है? मैंने सोचा, कि बार() दर्ज होने पर यह अस्थायी पहले ही नष्ट हो चुका है - लेकिन ऐसा लगता है कि ऐसा नहीं लगता है। तो, अब मुझे लगता है कि कॉल (बार) के बाद foo() द्वारा अस्थायी रूप से लौटाया जाएगा - क्या यह सही है? और क्यों?आजीवन आजीवन
std::string foo() {
std::string out = something...;
return out;
}
void bar(const char* ccp) {
// do something with the string..
}
bar(foo().c_str());
यह भी ध्यान दें कि 'c_str() 'केवल एक अस्थायी * सूचक * देता है। इसका जीवनकाल उस डेटा के जीवनकाल के बारे में कुछ भी नहीं कहता है जो यह इंगित करता है। – jalf
'c_str()' अस्थायी रूप से वापस नहीं आता है। यह सूचक प्रकार का एक रैल्यू देता है। सूचक प्रकार के रावल वस्तुओं नहीं हैं। उनके पास जीवन भर नहीं है। –