与类型转换相关的排名是啥意思?
Posted
技术标签:
【中文标题】与类型转换相关的排名是啥意思?【英文标题】:What does rank mean in relation to type conversion?与类型转换相关的排名是什么意思? 【发布时间】:2015-08-09 21:52:51 【问题描述】:来自 C++11 标准(草案 n3337)§5/9:
——如果两个操作数的类型相同,则不再进行转换 需要。
— 否则,如果两个操作数都具有有符号整数类型或两者都具有 无符号整数类型,具有较小整数类型的操作数 转换 rank 应转换为操作数的类型 更高的排名。
— 否则,如果具有无符号整数类型的操作数具有 rank 大于或等于另一个操作数类型的rank, 带符号整数类型的操作数应转换为 无符号整数类型的操作数。
——否则,如果带符号整数类型的操作数的类型可以 用无符号表示操作数类型的所有值 整数类型,无符号整数类型的操作数应为 转换为有符号整数类型的操作数的类型。
——否则,两个操作数都应转换为无符号整数 type 对应于带符号整数的操作数的类型 输入。
在这种情况下排名是什么意思? 肯定不是指std::rank, 因为这与数组中的维数有关......
就整数类型和浮点类型而言,我认为是指它们的潜在大小。
C++ 标准保证:
1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)
我是否正确地假设当时的排名是:
<strong>Rank</strong>
<strong>Type</strong>
1
char
2
short
3
int
@987654332 @long
5
long long
...
我无法在任何地方找到描述每种类型排名级别的list。
【问题讨论】:
参见 4.13/p1 ([conv.rank])。 @0x499602D2 是的,这就是我要找的。span> 在 C 规范中:6.3.1.1 布尔值、字符和整数 【参考方案1】:4.13 section 这么说
每个整数类型都有一个整数转换等级,定义如下:
——除了 char 和有符号 char 之外没有两个有符号整数类型(如果 char 已签名)应具有相同的等级,即使它们具有相同的等级 表示。
——有符号整数类型的秩应大于 任何尺寸较小的有符号整数类型。
——long long int 的等级要大于 long 的等级 int,应大于 int 的等级,应为 大于 short int 的秩,应大于 有符号字符的等级。
——任何无符号整数类型的等级应等于 对应的有符号整数类型
——任何标准整数类型的秩都应大于秩 具有相同大小的任何扩展整数类型。
——char的秩应该等于signed char和unsigned的秩 字符。
— bool 的等级应小于所有其他标准的等级 整数类型。
——char16_t、char32_t 和 wchar_t 的等级应等于等级 它们的基础类型 (3.9.1)。
——任何扩展有符号整数类型相对于另一个的等级 具有相同大小的扩展有符号整数类型是 实现定义,但仍受制于其他规则 确定整数转换等级。
- 对于所有整数类型 T1、T2 和 T3,如果 T1 的秩大于 T2 并且 T2 的排名高于 T3,那么 T1 的排名应该高于 T3。
【讨论】:
以上是关于与类型转换相关的排名是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章