排名对类型转换的意义是什么?

时间:2015-05-27 16:57:57

标签: c++ implicit-conversion type-conversion rank

来自C ++ 11标准(草案n3337)§5/ 9:

  

- 如果两个操作数具有相同的类型,则不再进行进一步的转换   需要的。

     

- 否则,如果两个操作数都有有符号整数类型或两者都有   无符号整数类型,操作数类型为较小的整数   转换 rank 应转换为操作数的类型   更高等级

     

- 否则,如果具有无符号整数类型的操作数具有 rank   大于或等于另一个操作数类型的 rank ,   带有符号整数类型的操作数应转换为类型   带有无符号整数类型的操作数。

     

- 否则,如果带有符号整数类型的操作数的类型可以   表示带有unsigned的操作数类型的所有值   整数类型,带无符号整数类型的操作数应为   转换为带有符号整数类型的操作数类型。

     

- 否则,两个操作数都应转换为无符号整数   类型对应于带有符号整数的操作数的类型   类型。

在此背景下排名意味着什么?
当然,它不是指std::rank
因为这与数组中的维数有关...

就整数类型和浮点类型而言,我认为它指的是它们的潜在大小。

C ++标准保证:

1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <=  sizeof(long long)  

我是否正确地假设当时的等级是:

Rank Type
1 char
2 short
3 int
4 long
5 long long
......

我无法在任何地方找到描述每种类型等级的list

1 个答案:

答案 0 :(得分:7)

4.13 section

  

每个整数类型都有一个整数转换等级,定义如下:

     

- 除了char和signed char之外没有两个有符号整数类型(如果是char   已签名)具有相同的等级,即使它们具有相同的等级   表示。

     

- 有符号整数类型的等级应大于等级   任何带有较小尺寸的有符号整数类型。

     

- long long int的等级应大于long的等级   int,应大于int的等级,其应为   大于短int的等级,大于等于   签名字符的排名。

     

- 任何无符号整数类型的等级应等于   对应的有符号整数类型

     

- 任何标准整数类型的等级应大于等级   任何具有相同大小的扩展整数类型。

     

- char的等级应等于signed char和unsigned的等级   炭。

     

- 布尔的等级应低于所有其他标准的等级   整数类型。

     

- char16_t,char32_t和wchar_t的等级应等于等级   他们的基本类型(3.9.1)。

     

- 任何扩展有符号整数类型相对于另一个的等级   具有相同大小的扩展有符号整数类型   实现定义,但仍受其他规则的约束   确定整数转换等级。

     

- 对于所有整数类型T1,T2和T3,如果T1的等级大于T2   并且T2的等级大于T3,那么T1的等级应大于T3   T3。