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

C++中string使用+=操作得到不同运行结果的原因是什么

输出差异原因分析

核心原因是运算符优先级规则,以及C++中char类型的整数本质:

  • C++里单引号包裹的'a'、'b'都是char类型,底层存储的是对应的ASCII整数值:'a'对应97,'b'对应98。
  • 第一段代码的执行逻辑:
string s;
s += 'a'; // 直接将char类型的字符'a'追加到字符串s末尾
s += 'b'; // 直接将char类型的字符'b'追加到字符串s末尾
cout<<s<<endl;//ab

两次操作都是单独向字符串追加单个char字符,最终拼接得到ab,符合预期。

  • 第二段代码的执行逻辑:
s = "";
s += 'a' + 'b';
cout<<s<<endl;//question mark character

C++中+的优先级高于+=,因此会先计算'a' + 'b'的结果:两个char类型做加法运算时会先做整数提升,转为int类型相加,得到97 + 98 = 195。之后这个195会被转为char类型,再追加到空字符串s中。
标准ASCII码的可打印字符范围是0~127,195超出了这个范围,属于不可打印的扩展ASCII字符,终端无法正常渲染该字符时,就会用问号作为占位符输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 20:45:03