Tre*_*key 7 c++ type-conversion rank implicit-conversion
从C++ 11标准(草案n3337)§5/ 9:
- 如果两个操作数具有相同的类型,则不需要进一步转换.
- 否则,如果两个操作数都有有符号整数类型或两者都有无符号整数类型,则具有较小整数转换等级类型的操作数应转换为具有较大等级的操作数的类型.
- 否则,如果具有无符号整数类型的操作数的秩 大于或等于另一个操作数的类型的秩,则带有符号整数类型的操作数应转换为具有无符号整数类型的操作数的类型.
- 否则,如果带有符号整数类型的操作数的类型可以表示具有无符号整数类型的操作数类型的所有值,则具有无符号整数类型的操作数应转换为带有符号整数类型的操作数的类型.
- 否则,两个操作数都应转换为与带有符号整数类型的操作数类型相对应的无符号整数类型.
在这种情况下,等级意味着什么?
当然它不是指std :: rank,
因为它与数组中的维数有关...
就整数类型和浮点类型而言,我认为它指的是它们的潜在大小.
C++标准保证:
1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)
Run Code Online (Sandbox Code Playgroud)
我是否正确地假设当时的等级是:
Rank
Type
1
char
2
short
3
int
4
long
5
long long
...
我无法在任何地方找到描述每种类型等级的列表.
在4.13段说,
每个整数类型都有一个整数转换等级,定义如下:
- 除了char和signed char之外没有两个有符号整数类型(如果char已签名)具有相同的等级,即使它们具有相同的表示.
- 有符号整数类型的等级应大于具有较小大小的任何有符号整数类型的等级.
- long long int的等级应大于long int的等级,该等级应大于int的等级,该等级应大于short int的等级,short rank应大于signed char的等级.
- 任何无符号整数类型的等级应等于相应有符号整数类型的等级
- 任何标准整数类型的等级应大于具有相同大小的任何扩展整数类型的等级.
- char的等级应等于signed char和unsigned char的等级.
- bool的等级应小于所有其他标准整数类型的等级.
- char16_t,char32_t和wchar_t的等级应等于其基础类型的等级(3.9.1).
- 任何扩展有符号整数类型相对于具有相同大小的另一个扩展有符号整数类型的等级是实现定义的,但仍然受制于确定整数转换等级的其他规则.
- 对于所有整数类型T1,T2和T3,如果T1的秩大于T2且T2的秩大于T3,则T1的秩应大于T3.
归档时间: |
|
查看次数: |
1541 次 |
最近记录: |