我已阅读cppreference.com的隐式转换:
整数提升: 小整数类型(如char)的prvalue可以转换为大整数类型(如int)的prvalue。
[...] 请注意,所有其他转换都不是提升;例如,重载解析会选择char -> int(提升),而不是char -> short(转换)。
从char到int的转换是“提升”;它很明显(从1个字节到4个字节)。 从char到short的转换不是“提升”;为什么? 我一直认为char是一个字节,而short(short int)是两个字节。为什么它不被视为提升?这似乎与第一行相矛盾。难道它不是指“从小类型转换到较大类型”就是提升吗?
整数提升: 小整数类型(如char)的prvalue可以转换为大整数类型(如int)的prvalue。
[...] 请注意,所有其他转换都不是提升;例如,重载解析会选择char -> int(提升),而不是char -> short(转换)。
从char到int的转换是“提升”;它很明显(从1个字节到4个字节)。 从char到short的转换不是“提升”;为什么? 我一直认为char是一个字节,而short(short int)是两个字节。为什么它不被视为提升?这似乎与第一行相矛盾。难道它不是指“从小类型转换到较大类型”就是提升吗?
寻找一些答案后:
我们能否认为"晋升是转化的特例"?我们可以说"所有的晋升都是转化,但并非所有的转化都是晋升"吗?
还是应该将它们看作是两个不同且独立的概念?
int
。而"Conversion"则指的是其他可以隐式完成的转换(例如char -> short,或int -> bool,或者当你定义一些自定义的转换运算符到bool等等)。 - Alexey S. Larionovshort
和int
有相同的位宽(这是允许的),它们有不同的等级。而且只有基本的int
类型在"自动"提升中使用。 - Adrian Moleint
是特殊的,它是“本地”的整数类型(例如,所有操作都通过专用硬件指令实现),因此将较小的整数类型(如short
和char
)转换为int
并进行操作比直接在较小的类型上使用指令更高效。这段历史是 C 和 C++ 中整数类型具有等级以及 "升级" 为int
不同于其他整数转换的原因之一。这种区别在现代处理器中不太重要(或无关紧要!),但支持与仍然相关的系统的兼容性。 - Peterint
。 - Toby Speight