如何修复编译错误:'std :: __ 1 :: string&类型的非const引用的无效初始化

时间:2015-08-30 12:05:39

标签: c++ string c++11

我是C ++的新手,我无法弄清楚这段代码有什么问题

 string& GetAddonCmeterString(string& sid) {
     ostringstream oss;
     oss <<  "{"; 
     oss <<     "currentValues : {sid : " << sid << "}"; 
     oss <<  "}";
     string& result = oss.str();
     return result;
 }

编译错误消息:

错误:'std :: __ 1 :: string&amp;类型的非const引用的初始化无效{aka std :: __ 1 :: basic_string,std :: __ 1 :: allocator&gt;&amp;}'来自类型'std :: __ 1 :: basic_string,std :: __ 1 :: allocator&gt;'的右值       串和放大器; result = oss.str();

1 个答案:

答案 0 :(得分:2)

是否编译,
不要将指针或引用返回到局部变量!

result完成时,

GetAddonCmeterString将被销毁并取消分配,您将返回一个不再存在的对象的内存地址!

你应该按值*:

返回字符串
  string GetAddonCmeterString(string& sid) {
     ostringstream oss;
     oss <<  "{"; 
     oss <<     "currentValues : {sid : " << sid << "}"; 
     oss <<  "}";
     return oss.str();
 }

*字符串不会按值返回,但会是moved,但由于您不熟悉C ++,为了便于讨论,请保持简单。