Life Scope of Temporary Variable
        Posted  
        
            by Yan Cheng CHEOK
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Yan Cheng CHEOK
        
        
        
        Published on 2010-06-15T01:03:02Z
        Indexed on 
            2010/06/15
            1:12 UTC
        
        
        Read the original article
        Hit count: 316
        
c++
#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();
}
The output is :
-->
--> Hello World
Hello, may I know the correct behavior is guarantee by C++ standard, or it depends on your compiler vendor implementations? I have tested this under VC2008 and VC6. Works fine for both.
© Stack Overflow or respective owner