umb*_*JYL 7 c++ gcc reference c++11 dangling-pointer
std::string &func(int vlu)
{
std::string str;
str = std::to_string(vlu) + "something";
return str;
}
Run Code Online (Sandbox Code Playgroud)
上述功能明显不安全.
以下是另一个版本.
std::string &func(int vlu)
{
return std::to_string(vlu) + "something";
}
Run Code Online (Sandbox Code Playgroud)
我有一些问题:
第二个版本的编译器(gcc)没有给我任何警告.安全吗?我只是认为编译器(或其他什么?)将创建一个临时变量来保存表达式的返回std::to_string(vlu) + "something".所以第二个版本也不安全.我说对了?
eer*_*ika 11
不,这两个计划都不安全.在这两种情况下,返回的引用都是悬空的,使用引用的行为将是未定义的.
第二个程序也是格式错误的,因为它试图将左值引用(返回)绑定到右值(临时).第二个程序可能被认为"不太安全",因为编译器可能会选择不编译它.
修复函数:当目的是返回一个新对象时,不要尝试返回引用.返回一个值.