2015-02-10 51 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()返回後可以認爲是穩定的。它將被複制,或者至少被移動到更現代的標準實現。