You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++函数返回const string&引用时输出为空的问题咨询

问题根因

你的代码触发了悬空引用的未定义行为,打印出空字符串只是未定义行为的一种表现,本质是返回的引用已经指向了被销毁的无效内存:

  • s1 + s2 是表达式运算生成的临时std::string对象,这个临时对象的生命周期仅持续到combine函数返回的瞬间
  • 你将这个临时对象绑定到返回值const string&上,等函数执行完毕回到调用点时,临时字符串已经被系统销毁回收
  • 此时你通过返回的引用访问内存,读到的是已经被释放的非法内存空间,出现空串、乱码、程序崩溃都是符合预期的随机结果,没有任何确定性。
修复方法

最合理的改法是直接按值返回拼接结果,不要返回引用:

std::string combine(std::string &s1, std::string &s2)
{
     return s1 + s2;
}

现代C++编译器会对这种返回场景自动做返回值优化(RVO),不会产生额外的字符串拷贝开销,性能和返回引用没有差异,是这类字符串拼接函数的标准写法。

注意:只要写返回引用的函数,必须严格保证被引用的对象在函数返回后、引用被使用的全周期内依然合法存活,永远不要返回函数内局部变量、临时表达式生成的临时对象的引用。

内容的提问来源于stack exchange,提问作者SomeoneNew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 18:24:41