C++ int 限制的提升动机

Rar*_*ima 7 c c++ types type-conversion

整数提升的工作原理是将低等级的所有内容提升为intuint。但为什么会这样呢?

区分“升级”和“降级”类型是有意义的。当您将 a 转换short为 a 时,char您可能会丢失数据。

然而,当排名上升时 (bool -> char -> short -> int -> long -> long long)没有机会丢失数据。如果我有 a char,将其转换为 ashort或 anint都没有关系,我仍然不会丢失任何数据。

我的问题是为什么 int 升级只从排名较低的类型向int?为什么会做出这样的决定?例如,为什么不转向下一个更高排名的类型(然后从那里继续,例如再次尝试推广)。

在我看来,当您尝试描述隐式转换语义时,它们似乎有点武断。“大多数int类型都可以“升级”,这意味着转换不会丢失数据,但升级仅适用于int,而不仅仅是任何更高级别的类型。如果您将任何内容转换为其他内容int,则称为转换“

使用 int 类型的实际排名来尝试一系列“促销”不是更简单吗?或者只是将任何向更高排名的转换称为“促销”?

PS 这是一个教育问题,不是关于特定的编程问题,而是出于我自己的好奇心。

小智 0

在 C 标准中,第 6.3.1.8 节描述了“常用算术转换”。(在C99中添加,链接至C11草案)

\n
\n

许多期望算术类型操作数的运算符会以类似的方式导致转换并产生结果类型。目的是确定操作数和结果的公共实数类型。

\n
\n

C99 Rationale V5.10描述了这样做的原因:

\n
\n

添加显式许可证是为了在 \xe2\x80\x9cwider\xe2\x80\x9d 类型中执行计算,而不是绝对必要的,因为这有时会产生更小、更快的代码,更不用说更频繁地得出正确答案了。\xe2\x80\x9cnarrower\xe2\x80\x9d 类型也可以按照 as if 规则进行计算,只要得到相同的最终结果即可。显式转换始终可用于获取所需类型的值。

\n
\n

从基本原理来看,可以合理地推断委员会认为这是最简单的解决方案,可以捕获最大数量的可能用途。

\n

从简单的角度来看,逐级晋升系统将大大增加实施标准所需的细节。它还会在不同位大小的平台之间产生各种各样的性能问题。寻求使用数据类型实现特定目标的程序员仍然可以通过显式类型转换获得灵活性。

\n