这里临时字符串的生命周期够长吗?

Is the lifetime of the temporary string long enough here?

#include <cstdio>
#include <string>

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

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

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

是的,够长了。字符串文字将不再作为函数 returns 存在,但此时它已被复制到临时 std::string。该字符串将被复制(或通过复制省略在调用站点创建)到调用代码。结果字符串将一直存在到表达式结束,足够长以传递给 printf.