[英]c++ : returning reference to temporary
我做了這個C ++代碼:
std::string const & Operand::toString() const
{
std::ostringstream convert;
convert << this->value;
return convert.str();
}
編譯器告訴我: returning reference to temporary
我是否必須將convert.str()
放入我的Operand
類中?
編輯:這是一次學校練習,我無法更改原型
convert.str();
這將返回一個std::string
對象,該對象將在Operand::toString()
返回之后銷毀。 因此,這是臨時變量,其生存期限於此功能的范圍。 您應該只按值返回string
本身:
std::string Operand::toString() const
{
std::ostringstream convert;
convert << this->value;
return convert.str();
}
要么:
const std::string Operand::toString() const
{
std::ostringstream convert;
convert << this->value;
return convert.str();
}
只需更改函數以返回std::string
而不是std::string const &
。 您想在此處按值返回。
只需刪除&
和const
即
std::string Operand::toString() const
{
std::ostringstream convert;
convert << this->value;
return convert.str();
}
如果您不能更改原型-它必須返回引用而不是字符串本身-您必須將字符串保留在某個地方並返回對其的引用。 也許創建一個靜態字符串,在其中分配convert.str()
並返回對該靜態字符串的引用。
std::string const & Operand::toString() const
{
static std::string s;
std::ostringstream convert;
convert << this->value;
s = convert.str();
return s;
}
David Schwartz在評論中建議使用另一種解決方案(答案不同),但這取決於您是否可以將該成員字符串添加到Operand
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.