转化和推广是一回事吗?
Is conversion and promotion the same thing?
我不确定升级是否只是将数据类型转换为更大的数据类型(例如 short
到 int
)。
或者提升是否意味着将数据类型转换为另一种 "compatible" 数据类型,例如将 short
转换为 int
,这将保持相同的位模式(额外的space 将用零填充)。转换是否意味着将 int
之类的东西转换为 float
,这将创建一个完全不同的位模式?
有两种东西叫促销:积分促销和浮点促销。整数提升是指整数类型(包括位域和 enum
s)被转换为 "larger" 整数类型,浮点提升具体只是 float
到 double
。
两种类型的促销都是更广泛转化的子集。
char
-> int
:积分提升
float
-> double
: 浮点提升
int
-> char
:[缩小] 转换(不是 促销)
int
-> float
: 转换
const char*
-> std::string
: 转换
Foo
-> Bar
: 可能是未定义的转换?
- 等等
提升是一种特定类型的内置类型转换,保证不会更改值。
您要推广的类型 到 必须能够准确地表示您要推广的类型的任何可能值 from。
Here is a list 个适用的转化。
晋升
char 或 short 值(有符号或无符号)在发生任何其他事情之前被提升为 int(或无符号)
这样做是因为 int 被认为是最有效的整数数据类型,并且保证从较小的数据类型到较大的数据类型不会丢失任何信息
转化
积分提升后,检查运算符的参数
如果两者是相同的数据类型,则评估继续
如果参数是不同的数据类型,将进行转换
演员表
可以使用强制转换强制表达式的类型。
强制转换只是括在括号中并放在常量、变量或表达式旁边的任何有效数据类型
请参考:website
我不确定升级是否只是将数据类型转换为更大的数据类型(例如 short
到 int
)。
或者提升是否意味着将数据类型转换为另一种 "compatible" 数据类型,例如将 short
转换为 int
,这将保持相同的位模式(额外的space 将用零填充)。转换是否意味着将 int
之类的东西转换为 float
,这将创建一个完全不同的位模式?
有两种东西叫促销:积分促销和浮点促销。整数提升是指整数类型(包括位域和 enum
s)被转换为 "larger" 整数类型,浮点提升具体只是 float
到 double
。
两种类型的促销都是更广泛转化的子集。
char
->int
:积分提升float
->double
: 浮点提升int
->char
:[缩小] 转换(不是 促销)int
->float
: 转换const char*
->std::string
: 转换Foo
->Bar
: 可能是未定义的转换?- 等等
提升是一种特定类型的内置类型转换,保证不会更改值。
您要推广的类型 到 必须能够准确地表示您要推广的类型的任何可能值 from。
Here is a list 个适用的转化。
晋升
char 或 short 值(有符号或无符号)在发生任何其他事情之前被提升为 int(或无符号) 这样做是因为 int 被认为是最有效的整数数据类型,并且保证从较小的数据类型到较大的数据类型不会丢失任何信息
转化
积分提升后,检查运算符的参数 如果两者是相同的数据类型,则评估继续 如果参数是不同的数据类型,将进行转换
演员表
可以使用强制转换强制表达式的类型。 强制转换只是括在括号中并放在常量、变量或表达式旁边的任何有效数据类型
请参考:website