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

C++中向string追加字符时+=拼接两个char为何无法达到预期效果

原因详解
  • 运算符优先级差异:C++中+的优先级高于+=,因此第二种写法会先计算'a' + 'b',再将计算结果传给string::operator+=,完全不符合「先后追加a、b两个字符」的预期。
  • 整数类型提升规则:char属于小整数类型,参与算术运算时会先被隐式提升为int类型再执行计算。'a'的ASCII值为97,'b'的ASCII值为98,二者相加得到的是int类型的195,而非两个独立的char字符。
  • 类型溢出触发警告:通常默认环境下char是有符号类型,合法取值范围为-128 ~ 127,int类型的195超过了char的取值上限,隐式转换时会发生数值溢出,因此编译器会抛出对应警告,最终追加到字符串中的是溢出后的乱码字符,而非预期的a、b。

第一种写法不存在算术运算步骤,直接将char类型的'a'传给string重载的operator+= (char)方法,没有类型转换和溢出问题,因此可以正常追加字符。


正确实现写法

如果需要连续追加两个char字符,可使用以下任意一种写法:

// 分开两次调用+=
string s = "";
s += 'a';
s += 'b';

// 直接追加字符串常量
s += "ab";

// C++14及以上可用string字面量
using namespace std::string_literals;
s += "ab"s;

内容的提问来源于stack exchange,提问作者k-dx

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:54:03