4

我刚刚碰到了如下代码,这对我来说看起来很可疑(为了保护无辜者而省略了细节):

std::string MakeString()
{
    char buf[12] = { 0 };
    return &buf[0];
}

这是好的还是不安全的?是否保证在 buf 超出范围之前创建 std::string ?

4

1 回答 1

6

你写的相当于:

std::string MakeString()
{
    char buf[12] = { 0 };
    return buf;
}

并且始终保证此代码是安全的。事实上,这种情况与任何通过复制返回值的函数没有太大区别。

于 2013-09-10T08:20:24.430 回答