C++:返回对临时的引用

c++ : returning reference to temporary

本文关键字:引用 返回 C++      更新时间:2023-10-16

我做了这个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 &。您希望在此处按值返回。

只需删除&和常量

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