C++中char类型与int类型相加返回int结果的实现原理是什么
#include<iostream> using namespace std; int main() { char a = 77; int b = a + 3; cout << a << endl; cout << b << endl; return 0; }
问题1:为什么a+3得到的80可以存储在int类型变量b中?
这个现象是C++标准规定的整型提升规则导致的:
- 所有宽度小于
int的整型类型(包括char、short等)在参与算术运算时,会先被隐式转换为int类型再执行运算。 - 代码中
char类型的a在执行a+3之前,会先被提升为int类型,取值保持77不变,再和默认是int类型的字面量3相加,得到的运算结果本身就是int类型的80,赋值给同类型的变量b完全符合类型匹配要求。
问题2:整数与字符类型相加返回int类型结果的实现逻辑
- 首先明确:
char在C++中本质就是整型类型,它底层存储的就是字符对应的ASCII码整数值,只是cout输出时调用了针对char类型的重载方法,才会输出对应字符而非整数值。 - 整个运算的编译阶段处理逻辑如下:
- 编译器识别到运算操作数
a为char类型,宽度小于int,触发整型提升逻辑 - 生成对应指令将
a的存储值77扩展为int类型的宽度(常规环境下为4字节) - 两个
int类型的操作数77和3执行加法运算,得到int类型的结果80
- 编译器识别到运算操作数
如果把运算结果赋值给char类型变量,也可以编译通过,此时会把int类型的80隐式转换回char类型,输出这个变量时就会得到ASCII码80对应的字符P。
内容的提问来源于stack exchange,提问作者Samiul Islam
相关产品推荐
相关产品推荐

