转化和推广是一回事吗?

Is conversion and promotion the same thing?

我不确定升级是否只是将数据类型转换为更大的数据类型(例如 shortint)。

或者提升是否意味着将数据类型转换为另一种 "compatible" 数据类型,例如将 short 转换为 int,这将保持相同的位模式(额外的space 将用零填充)。转换是否意味着将 int 之类的东西转换为 float,这将创建一个完全不同的位模式?

有两种东西叫促销:积分促销和浮点促销。整数提升是指整数类型(包括位域和 enums)被转换为 "larger" 整数类型,浮点提升具体只是 floatdouble

两种类型的促销都是更广泛转化的子集。

  • char -> int:积分提升
  • float -> double: 浮点提升
  • int -> char:[缩小] 转换(不是 促销)
  • int -> float: 转换
  • const char* -> std::string: 转换
  • Foo -> Bar: 可能是未定义的转换?
  • 等等

提升是一种特定类型的内置类型转换,保证不会更改值。

您要推广的类型 必须能够准确地表示您要推广的类型的任何可能值 from

Here is a list 个适用的转化。

晋升

char 或 short 值(有符号或无符号)在发生任何其他事情之前被提升为 int(或无符号) 这样做是因为 int 被认为是最有效的整数数据类型,并且保证从较小的数据类型到较大的数据类型不会丢失任何信息

转化

积分提升后,检查运算符的参数 如果两者是相同的数据类型,则评估继续 如果参数是不同的数据类型,将进行转换

演员表

可以使用强制转换强制表达式的类型。 强制转换只是括在括号中并放在常量、变量或表达式旁边的任何有效数据类型

请参考:website