算术运算操作数类型转换

3
在以下的代码中为什么会出现这种情况:
short a = 4;
char b = 2;
cout << sizeof(a/b);

sizeof(a/b)是4吗?为什么不是short的大小为2?


5
因为a/b是整数值并且sizeof(int)为4。 - Mandy007
auto c = a/b; cout << sizeof(c); 的结果将会是4。 - Eljay
4
Ron的回复并没有错误,但是Mandy007的评论更好。你的例子阐述了整型提升。Eljay的评论只是一种同义反复 - FoggyDay
1
@FoggyDay 现在已经纠正 :) - Ron
1
@Ron - 注意到了修改。非常好的回复 :) - FoggyDay
显示剩余2条评论
1个回答

8

这是因为表达式 a / b 的类型是 int 而不是 short,所以结果是 4

在执行算术运算之前,会使用integral promotion将较短的整数类型提升为int。

因此,现在你的(较短的整数)操作数 ab 被提升为 int 类型。因此,整个 a / b 表达式变成了 int,而在你的机器上,int 类型的大小可能是 4 字节。

在你的情况下,sizeof 运算符返回表达式的类型 int 的大小,即 4sizeof 运算符可以返回:

  • 类型的大小
  • 表达式类型的大小

这种类型转换不叫做类型转换,而是整型提升


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接