为什么添加两个short返回一个int?

时间:2016-08-21 04:30:33

标签: c++ c++11 c++14

我读了一个c ++教程,说算术运算符返回可能的最小数据类型(即如果添加了2个整数,则返回类型将为int,如果添加了float和double,则返回类型将为double)。但是,它还表示对短路的算术运算会返回整数。考虑到短路占用的内存少于整数,为什么会发生?教程错了吗?该教程适用于c ++ 11,所以也许在c ++ 14中已经弃用了?谢谢!

2 个答案:

答案 0 :(得分:1)

  

考虑到短片占用的内存少于整数,为什么会这样?

那是因为标准是这样说的。

  

教程错了吗?

没有

从C ++ 11标准(注意通常的算术转换位):

  

5个表达

     

...

     

9许多期望算术或枚举类型操作数的二元运算符会以类似的方式引起转换并产生结果类型。目的是产生一个通用类型,它也是结果的类型。此模式称为通常的算术转换,其定义如下:

     

...

     

- 否则,应对两个操作数执行整数促销(4.5)。

整体推广在标准中定义为:

  

4.5整体促销

     

1整数转换等级(4.13)小于boolchar16_tchar32_twchar_t以外的整数类型的prvalue如果int可以表示源类型的所有值,则可以将{1}}转换为int类型的prvalue;否则,源prvalue可以转换为int类型的prvalue。

如上所述,在将一些二元运算符应用于操作数之前,unsigned int被提升为short

有关运算符int+的部分明确提到通常的算术转换是在操作数上执行的:

  

5.7添加剂运算符

     

1添加剂操作符-+从左到右分组。通常的算术转换是针对算术或枚举类型的操作数执行的。

答案 1 :(得分:0)

类型int是目标系统的“自然大小”。小于int的整数类型在算术表达式中被提升为int,这样处理器可以最有效。这些日子可能不那么令人担忧,但它仍然是C和C ++语言的一部分。