来自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。
答案 0 :(得分:7)
每个整数类型都有一个整数转换等级,定义如下:
- 除了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。