首先发生什么,隐式转换为返回值或破坏局部变量?

时间:2013-09-10 08:17:46

标签: c++

我刚刚碰到了下面的代码,这些代码看起来很可疑(详细说明是为了保护无辜者):

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

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

1 个答案:

答案 0 :(得分:6)

你所写的内容相当于:

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

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