2015-02-10 67 views
0
#include <cstdio> 
#include <string> 

std::string foo() 
{ 
    return "Hello, World!"; 
} 

int main() 
{ 
    printf("%s\n", foo().c_str()); 
} 
+4

是的。它足够长。 – 2015-02-10 22:36:59

+0

http://stackoverflow.com/questions/584824/ – 2015-02-10 22:40:09

回答

0

是的,它足够长。字符串文字将在函数返回时不再存在,但在此时它已被复制到临时文件std::string。该字符串将被复制(或将通过复制elision在呼叫站点创建)到调用代码。结果字符串将一直存在,直到表达式的结尾,足以传递给printf

+1

'字符串文字将在函数返回时不再存在,否则不会,字符串文字具有静态存储持续时间。这与问题无关。 – sbabbi 2015-02-10 22:52:59

0
return "Hello, World!"; 

返回std::string(隐含)从c风格字符串文字构成,其可以被认为是在功能的范围static
临时std::string在这种情况下从foo()返回后可以认为是稳定的。它将被复制,或者至少被移动到更现代的标准实现。

相关问题