临时字符串的生命周期是否足够长?

时间:2015-02-10 22:36:35

标签: c++ object-lifetime

#include <cstdio>
#include <string>

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

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

2 个答案:

答案 0 :(得分:0)

return "Hello, World!";

返回从c风格的字符串文字构造的std::string(隐含地),并且在函数的范围内可以被视为static
在这种情况下,从std::string返回后,临时 foo()的生命周期可以被认为是稳定的。它将被复制,或至少被移动与更现代的标准实现。

答案 1 :(得分:0)

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