与类型转换相关的排名是啥意思?

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。

【讨论】:

以上是关于与类型转换相关的排名是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

“不兼容的类型:void 不能转换为 ...”是啥意思?

C语言 显式 隐式是啥意思

CONVERT是啥意思?

SQL中conver函数是啥意思

无法将类型“System.DateTime”隐式转换为“string”是啥意思?怎么改正?

java引用类型的类型转换规则是啥?