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 &
。您希望在此处按值返回。
只需删除&
和常量
即
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
。
相关文章:
- 如何通过引用返回对象
- 函数如何使用引用返回所需的数字?
- 如何防止引用返回的私有结构的突变
- 如何在不使用临时变量的情况下取消引用返回指针的函数的返回值?
- 通过引用返回的变量的范围
- 对于具有引用返回类型的搜索算法,默认返回值应该是什么?
- 运算符重载C++类中的引用返回
- C++对象引用返回不同的值
- 解释通过从函数引用返回数组的语法
- 具有引用返回类型的重写方法上的协变返回类型无效
- 为什么在通过引用返回运算符分配时取消引用'this'指针?
- 为什么我在函数中使用引用并通过引用返回它仍然有效?
- 直接在 C++ 中将值分配给引用返回类型
- C++当您取消引用指向类对象的指针,然后将其作为引用返回时,是否可以对此引用调用方法
- 可以通过常量引用返回默认参数的值吗?
- 按值与右值引用返回
- 非常量引用返回函数在常量值返回函数上用作 r 值
- 当我使用按引用返回时,我不知道这些代码之间的区别
- 为什么通过引用返回向量比通过移动返回要快得多?
- 通过引用返回包含对象的向量