这里临时字符串的生命周期够长吗?
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
.
#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
.