首页 > 解决方案 > 以下代码中发生了多少次类型转换?

问题描述

我正在研究自动类型转换(自动转换)并得出以下代码。

char a = 10, b = 5;
int res;
res = a / b;

我认为自动投射只发生了 2 次(char a转换为intchar b转换为int)。但据说答案是4次。

有人可以解释为什么自动类型转换发生 4 次吗?

标签: ctype-conversion

解决方案


请注意,正确的术语是转换转换可以是隐式的(如果由编译器静默执行),也可以是显式的(通过程序员编写的强制转换运算符)。强制转换始终是显式转换。

这里确实发生了几个隐式转换。请注意,整数常量 like10被视为int表达式中的变量。

  • a = 10int通过从to赋值的隐式转换char
  • b = 5int通过从to赋值的隐式转换char
  • aina / b被提升为整数int,作为通常的算术转换的一部分。
  • bina / b被提升为整数int,作为通常的算术转换的一部分。

然后的结果a / b是 type int,与 = 左操作数的类型相同res,因此不需要进一步转换。

有关详细信息,请参阅隐式类型提升规则


推荐阅读