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

