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 可用作的简写形式

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值