निम्नलिखित सी ++ कोड अच्छी तरह से गठित है:std :: स्ट्रिंग :: c_str() और temporaries
void consumer(char const* p)
{
std::printf("%s", p);
}
std::string random_string_generator()
{
// returns a random std::string object
}
consumer(random_string_generator().c_str());
समस्या मैं इसके साथ है, यह है कि अस्थायी std :: स्ट्रिंग वस्तु बनाने और लेने के बाद c_str() पॉइंटर, std :: स्ट्रिंग ऑब्जेक्ट को नष्ट होने से रोकता है (या शायद मैं गलत हूं?)। यदि आप सब कुछ के बावजूद ठीक है, तो क्या आप मुझे मानक पर इंगित कर सकते हैं। यह काम करता है, जब मैं जी ++ के साथ परीक्षण करता हूं।
क्या आप सी ++ 03 या सी ++ 11 मानक के संबंध में संकेत दे सकते हैं? – user1095108
अस्थायी जीवनकाल §12.2 में परिभाषित किया गया है। (धारा 12 हकदार "विशेष सदस्य कार्यों" जो वास्तव में नहीं है, जहां आप temporaries के जीवन भर के लिए देखने के लिए उम्मीद थी है, लेकिन वह कहाँ है कि है।) –
@ user1095108 और समारोह तर्क के जीवनकाल § से प्राप्त किया जा सकता 3.2.2 और §3.7.2 सी ++ 03 मानक में। – juanchopanza