#include <cstdio>
#include <string>
std::string foo()
{
return "Hello, World!";
}
int main()
{
printf( "%s\n", foo().c_str() );
}
答案 0 :(得分:0)
return "Hello, World!";
返回从c风格的字符串文字构造的std::string
(隐含地),并且在函数的范围内可以被视为static
。
在这种情况下,从std::string
返回后,临时 foo()
的生命周期可以被认为是稳定的。它将被复制,或至少被移动与更现代的标准实现。
答案 1 :(得分:0)
是的,它足够长。当函数返回时,字符串文字将不复存在,但此时它已被复制到临时std::string
。该字符串将被复制(或将通过复制省略在呼叫站点创建)到调用代码。生成的字符串将一直存在,直到表达式结束,足够长,可以传递给printf
。