簡體   English   中英

c + +:返回對臨時的引用

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM