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

Joh*_*ski 4 c++

我只是碰到了下面的代码,看起来像我一样腥(详细遗漏以保护无辜者):

std::string MakeString()
{
    char buf[12] = { 0 };
    return &buf[0];
}
Run Code Online (Sandbox Code Playgroud)

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

izo*_*ica 6

你写的相当于:

std::string MakeString()
{
    char buf[12] = { 0 };
    return buf;
}
Run Code Online (Sandbox Code Playgroud)

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