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
相关产品推荐
相关产品推荐

