[英]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.