返回对本地对象的引用时的编译器警告

use*_*645 2 c++ reference

如何在不收到警告的情况下返回对象的引用:

std::string& GetString()
{
    std::string str = "Abcdefghijklmnopqrstuvwxyz";
    return str;
}

int main()
{
    std::string str = GetString();
}
Run Code Online (Sandbox Code Playgroud)

这会导致对恭维的警告.

Jam*_*lis 14

在您的示例中,您将返回对局部变量的引用str.一旦GetString()返回,str就会被销毁并且引用无效(它指的是已被销毁的对象).

如果返回对对象的引用,则它必须是在函数返回后仍然有效的对象(例如,它不能是局部变量).

在这种特殊情况下,您必须str按值返回.返回引用的最常见用途是返回对成员变量的引用的成员函数.