C++ - 分区的类型?

q09*_*987 10 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?
Run Code Online (Sandbox Code Playgroud)

如果我错了,请纠正我.

谢谢

ild*_*arn 10

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

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

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

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


peo*_*oro 5

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

因此,你所有问题的答案都是肯定的.


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

将"定义为"比"更强",我们可以这样说:

long double> double> float> unsigned long> long> unsigned int> int> unsigned short> short> unsigned char> char