C ++ - 分区的类型?

时间:2011-04-25 16:37:07

标签: c++

我想确保我对C ++部门的返回类型的理解,

int / int => return is int?

float / float => return is which type? float?

double /double => return is double?

int / double => return is double?

int / float => return is float?

如果我错了,请纠正我。

谢谢

6 个答案:

答案 0 :(得分:10)

所有这些都是正确的。这是C ++ 03标准所说的内容(§5/ 9):

  

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

     
      
  • 如果任一操作数的类型为long double,则另一个操作数应转换为long double
  •   
  • 否则,如果任一操作数为double,则另一个操作数应转换为double
  •   
  • 否则,如果任一操作数为float,则另一个操作数应转换为float
  •   
  • 否则,应对两个操作数执行整体促销(4.5)。
  •   
  • 然后,如果任一操作数为unsigned long,则另一个操作数将转换为unsigned long
  •   
  • 否则,如果一个操作数是long int而另一个是unsigned int,那么如果long int可以代表unsigned int的所有值,则{{1} }应转换为unsigned int;否则两个操作数都应转换为long int
  •   
  • 否则,如果任一操作数为unsigned long int,则另一个操作数应转换为long
  •   
  • 否则,如果任一操作数为long,则另一个操作数应转换为unsigned
  •   
     

[注意:否则,唯一剩下的情况是两个操作数都是unsigned]

答案 1 :(得分:5)

operator/用于基本数据类型(就像大多数(如果不是全部)基本类型的运算符一样)返回其两个操作数的最强类型。

所有问题的答案都是肯定的。


一般来说,浮点类型比整数类型强,而无符号强于有符号......

定义>因为“强于”,我们可以说:

long double>双>浮动> unsigned long>长> unsigned int> int> unsigned short>简短> unsigned char>炭

答案 2 :(得分:1)

在所有情况下,你都是正确的。涉及至少一个浮点类型的操作规则是,如果任一类型是long double,则结果为long double;否则,如果任一类型为double,则结果为double,否则结果的类型为float

两个int之间的算术运算产生int结果。

其他类型之间的规则稍微复杂一些,可能依赖于实现;对于几乎所有操作,整数提升意味着操作数被提升为至少int大小的类型,至少产生int大小的结果。

答案 3 :(得分:1)

仅考虑三种类型(floatdoubleint):

  • 如果任何操作数为double,则结果为double
  • 否则,如果任何操作数为float,则结果为float
  • 否则结果将是int

答案 4 :(得分:0)

将为作业键入结果(如果规则存在)。如果你有int x = dY + iZ;那么升级将导致加法结果加倍,但是当它被赋值给x时它将被转换为int。谷歌“c ++中的变量推广”了解更多细节。

答案 5 :(得分:0)

粗略地说,在C ++中,在任何情况下,在执行操作之前,两个操作数都会转换为两个操作数类型的“最大”类型。请参阅MSDN Standard Arithmetic Conversions