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

C++中std::runtime_error抛出异常内容缺失原因咨询

为什么两种throw语句的异常信息表现不同?

咱们先拆解第一个出问题的语句:

throw std::runtime_error("abcdefghijklmnopqrstuvq"+12);

这里的 "abcdefghijklmnopqrstuvq" 是一个C风格字符串字面量,它在C++中的类型是 const char*。当你对一个指针做加法操作(比如+12),这本质是指针算术运算:指针会向前偏移12个char的长度。

咱们数一下原字符串的字符索引:

  • a是索引0,b是1,……,l是11,m是12
    所以偏移12个字符后,指针直接指向了原字符串中第13个字符(m)的位置,std::runtime_error 接收这个指针后,就从m开始读取字符串,最终输出的异常信息自然就是 mnopqrstuvq 了。

再看第二个正常的语句:

throw std::runtime_error("abcdefghijklmnopqrstuvq"+std::to_string(12));

这里的 std::to_string(12) 返回的是一个 std::string 对象。当你把C风格字符串字面量和 std::string 做加法时,C++会先把字面量隐式转换为 std::string,然后执行字符串拼接操作,最终得到的是原字符串加上"12"的完整新字符串,所以异常信息会正常显示拼接后的内容。

简单总结:

  • 第一种是指针偏移,不是字符串拼接
  • 第二种是真正的字符串拼接,因为涉及到std::string的重载运算符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 17:27:32