#include <cstdio>
#include <string>
void fun(const char* c)
{
printf("--> %s\n", c);
}
std::string get()
{
std::string str = "Hello World";
return str;
}
int main()
{
const char *cc = get().c_str();
// cc is not valid at this point. As it is pointing to
// temporary string internal buffer, and the temporary string
// has already been destroyed at this point.
fun(cc);
// But I am surprise this call will yield valid result.
// It seems that the returned temporary string is valid within
// scope (...)
// What my understanding is, scope means {...}
// Is this valid behavior guarantee by C++ standard? Or it depends
// on your compiler vendor implementations?
fun(get().c_str());
getchar();
}
उत्पादन का जीवन स्कोप है:अस्थायी चर
-->
--> Hello World
हैलो, मैं पता हो सकता है सही व्यवहार सी ++ मानक द्वारा गारंटी है, या यह अपने संकलक विक्रेता कार्यान्वयन पर निर्भर करता है? मैंने इसका परीक्षण वीसी -2008 और वीसी 6 के तहत किया है। दोनों के लिए ठीक काम करता है।
डुप्लिकेट: http://stackoverflow.com/questions/2506793/c-life-span-of- समकालीन-arguments –
वैसे, आपके 'get' फ़ंक्शन को सरलीकृत किया जा सकता है: std :: string get () {वापसी "हैलो वर्ल्ड"; } – fredoverflow