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

关于std::string移动构造与代码中noexcept合理性的问询

结论:给这个foo函数加noexcept完全不合理
  • 你搞错了核心问题:p_str + "FOO"这个拼接操作本身就可能抛出异常。
    拼接字符串时,std::string需要为结果分配新内存,一旦系统内存不足,这个分配会抛出std::bad_alloc。这一步发生在构造l_str之前,和移动构造是否抛异常没关系。
  • noexcept是对整个函数的承诺——你保证函数在任何执行路径下都不会抛出异常。但拼接操作的内存分配显然可能打破这个承诺,一旦异常抛出,程序会直接触发std::terminate强制终止,这是完全不合理的。
  • 顺带提一句:你对右值的理解是对的,p_str + "FOO"的结果是右值,构造l_str时确实会调用不抛异常的移动构造,但这只覆盖了构造l_str的环节,前面的拼接步骤依然有抛异常的风险。

所以这个noexcept必须去掉。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 12:06:28