C++冲刺(二)内置类型转换

13 篇文章 0 订阅
C++定义了一组内置类型对象之间的标准转换,在必要时它们被编译器隐式地应用到对象上。
  • 隐式类型转换发生在以下几种情况:
    • 1.在混合类型的算术表达式中。在这种情况下最宽的数据类型成为目标转换类型,这也被称为算术转换
    • 2.用一种类型的表达式赋值给另一种类型的对象
    • 3.把一个表达式传递给一个函数,调用表达式的类型与形式参数的类型不相同
    • 4.从一个函数返回一个表达式的类型与返回类型不相同
  • 算术转换保证了二元操作符,如加法或乘法的两个操作数被提升为共同的类型,然后再用它表示结果的类型。两个通过的指导原则如下:
    • 1.防止精度损失,如果必要的话,类型总是被提升为较宽的类型
    • 2.所有含有小于整型的有序类型的算术表达式在计算之前其类型都会被转换成整型。(整值提升)
  • 规则定义如上面所述,这些规则定义了一个类型转换层次结构。浮点类型转换优先级从高到低为:long double->double->float,一个操作数为以上三个之一,则另一个也将被转换为相同的类型。否则如果两个操作数都不是3种浮点类型之一,他们一定是某种整值类型。在确定共同的目标提升类型之前,编译器将在所有小于int的整值类型上施加一个被成为整值提升的过程。在进行整值提升时类型char、signed char、unsigned char和short int都被提升为类型int。如果机器上的类型空间足够表示所有unsigned short型的值,这发生在short用半个字而int用一个字表示的情况下,则unsigned short int也被转换为int,否则它会被提升为unsigned int。wchar_t和枚举类型被提升为能够表示其底层类型所有值的最小整数类型。整型类型转换优先级从高到低为:unsigned long->long->unsigned int->int。long转型有一个例外,如果一个是long而另一个是unsigned long,则一般long长度不足以存放unsigned int所有值,此时两个都被提升为unsigned long型。若两个都不是long型而其中一个是unsigned int,则另一个也被转换成unsigned int,否则两个操作数一定都是int型。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值