C++:标准转换
简介
C++ 语言定义其基础类型之间的转换。 它还定义指针、引用和指向成员的指针派生类型的转换。 这些转换称为 标准转换。
本节讨论下列标准转换:
整型提升
整型转换
浮点转换
浮点转换和整型转换
算术转换
指针转换
引用转换
指向成员的指针转换
备注
用户定义的类型可指定其自己的转换。 构造函数和转换中介绍了用户定义类型的转换。
以下代码将导致转换(本例中为整型提升):
long long_num1, long_num2;
int int_num;
// int_num promoted to type long prior to assignment.
long_num1 = int_num;
// int_num promoted to type long prior to multiplication.
long_num2 = int_num * long_num2;
仅当转换生成引用类型时,其结果才为左值。 例如,声明为的用户定义的转换 operator int&() 返回引用,并且是左值。 但是,声明为的转换将 operator int() 返回对象,而不是左值。
整型提升
整数类型的对象可以转换为另一个更宽的整型类型,即可以表示较大值集的类型。 这种扩大类型的转换被称为 整型提升。 使用整型提升时,可以在表达式中使用以下类型,只要可以使用其他整型类型:
类型为和的对象、文本和常量 char****short int
枚举类型
int 位域
枚举器
C + + 升级是 “保留值”,因为保证升级后的值与提升前的值相同。 在值保留提升的情况下, char int 如果 int 可以表示原始类型的完整范围,则较短整型类型的对象 (如位域或) 类型的对象。 如果 int 无法表示值的完整范围,则将对象提升为类型 unsigned int 。 尽管此策略与标准 C 所使用的策略相同,但值保留转换不保留对象的 “符号”。
值保留提升和保留符号的提升通常会生成相同的结果。 但是,如果升级的对象显示为,它们可能会产生不同的结果:
、、、 / % /= %= 、 < 、、 <= > 或的操作数 >=
这些运算符依赖于用于确定结果的符号。 当应用于这些操作数时,值保留和签署保存会产生不同的结果。
或的左操作数 >>``>>=
在移位操作中,这些运算符会以不同的方式处理签名和未签名的数量。 对于有符号数量,右移操作会将符号位传播到空出的位位置,而空出的位位置则以无符号的数量填充。
重载函数的参数或重载运算符的操作数,它依赖于参数匹配的操作数类型的符号。
整型转换
整型转换 是整型之间的转换。 整数类型为 char 、 short (或 short int) 、、 int long 和 long long 。 这些类型可以用或进行 signed 限定 unsigned ,并 unsigned 可用作的简写形式