【发布时间】:2021-12-27 08:57:41
【问题描述】:
由于我们可以将右值传递给采用 const left ref 的函数,
void taking(const string& ref) {}
taking("abc");
我们可以在不报告警告的情况下将右值作为 const left ref 返回吗?
const string& returning()
{
static string s = "abc";
if (1)
{
return s;
}
else
{
return "xyz"; // warning: return-local-addr
}
}
cout<<returning()<<endl;
【问题讨论】:
-
这能回答你的问题吗? warning: returning reference to temporary
-
嗨@Rana,我确实知道警告发生了什么。但我的情况是将右值的返回分支添加到返回 const left ref 的函数中。我认为这与您的问题有点不同。
-
仔细查看我给出的链接问题。这个问题也有
ifelse分支,就像你的一样。那里给出的答案已经解释了你在这里所拥有的。如果/当您在那里了解警告的原因时,您也可以在此处了解它,反之亦然。 -
嗨@Rana,实际上在我的例子中,该函数是从一个接口派生的。所以它必须返回 const left ref 而不是 const 值。我可能会在函数中保留一个静态变量,在这种情况下会占用一些额外的内存
标签: c++ rvalue const-reference