C++中类型转换概述(待更新…)

1. 前言

在C++中某些类型存在关联,有时我们可能需要用一种类型来替代另一种类型,此时就需要类型转换,类型转换一般可分为隐式类型转换(编译器自动进转换)和强制/显示类型转换(开发者手动进行),以下将针对这里两种类型做一个大致的介绍。
注:本文类容大部分来源于《C++ primer》一书

2. 直奔主题

2.1 隐式类型转换

隐式类型转换包括算数类型转换,和其他的隐式转换;
比如:这个我们平时用得比较多,或是说经常考的比较多,比如int r = 5.02 + 4的结果为9就是进行的隐式转换, 先将4转换为double再和5.02相加,最后将结果9.02初始化int r,使double又转换为了int。

2.1.1 算数转换

概念上讲:将一种算数类型转换为另一种算数类型。转换大致都是按照最近最大原则,就是旁边谁能存得数值范围更大就向谁转换。

(1)整型提升
我们知道内置的算数类型分为两类,整型和浮点型,整型提升就会将较小的整数类型提升成为较大的整数类型:
char、signed char、unsigned char、short、unsigned short →→提升为→→
int 或 unsinged int

wchar_t、char16_t、char32_t→→提升为→→
int或unsinged int 或 long 或 unsigned long 或 long long 或 unsigned long long

(之所以会”或”是根据具体转换后的类型是否能存下转换前的全部数值范围)

(2)无符号类型转换
比如有两个运算对象,un_a和a,其中un_a为无符号类型,a为带符号类型。

un_a的类型不小于a :则a将转换为un_a的类型,但是如果a正好是个负数,那么将产生一些副作用,比如说int 会转换为 unsigned int ,int如果是正数那么相安无事,但是如果是负数,则出现问题(所以切勿混用带符号类型和无符号类型)。

un_a的类型小于a :转换依赖于机器,如果无符号类型的值都能存在于带符号类型则就转换为带符号类型,如果不能则都转换为无符号类型。eg,long 和 unsigned int,假设机器中int 和long大小一致,则long 转换为 unsigned int(大小一致时向无符号转换), 但如果机器的long 比int 大,则unsigned int将转为long(向大的转)

(3)总结基本规则
运算对象不一致时,转换为同一种类型。如果是整数,先进行整型提升,提升后发现两个符号类型不一致,则进行符号类型转换,转换的原则是大小一致的,有符号向为无符号转换(注意负数将出现异常),大小不一致的,类型小的向类型大的转换。

(4)例子
(源于书籍)

 int main()
{bool flag  = 0;       char cval = 'a';short sval = -1;        unsigned short usval = 1;int ival = -1;       unsigned int  uival = 1;long lval = -1;       unsigned long ulval = 1;float fval = 1.0;     double dval = 1.0;cout << typeid(3.14L + 'a').name() << endl;       // 'a'提升为int, int再转换为long doublecout << typeid(dval + ival).name() << endl;       // ival转换为doublecout << typeid(dval + fval).name() << endl;        // fval转换为doublecout << typeid(ival = dval).name() << endl;        // dval 转换为intcout << typeid(flag = dval).name() << endl;      // 如果 dval 是 0,则 flag 是 false,否则 flag 是 truecout << typeid(sval + cval).name() << endl;        // sval和cval都提升成intcout << typeid(cval + lval).name() << endl;     // cval 转换成 longcout << typeid(ival + ulval).name() << endl;   // iva丄转换成 unsigned longcout << typeid(usval + ival).name() << endl;   // 根据unsigned short和int所占空间的大小进行提升cout << typeid(uival + lval).name() << endl; // 根据unsigned int和long所占空间的大小进行转换system("pause");return 0;
}

2.1.2 其他隐式转换

待续。。。。
此时我只是一个书籍搬运工

meo学习笔记5:C++中的类型转换概述相关推荐

  1. SpringBoot学习笔记(4)----SpringBoot中freemarker、thymeleaf的使用

    1. freemarker引擎的使用 如果你使用的是idea或者eclipse中安装了sts插件,那么在新建项目时就可以直接指定试图模板 如图: 勾选freeMarker,此时springboot项目 ...

  2. Hadoop学习笔记—11.MapReduce中的排序和分组

    Hadoop学习笔记-11.MapReduce中的排序和分组 一.写在之前的 1.1 回顾Map阶段四大步骤 首先,我们回顾一下在MapReduce中,排序和分组在哪里被执行: 从上图中可以清楚地看出 ...

  3. 【theano-windows】学习笔记十七——梯度中的consider_constant

    前言 主要是在写玻尔兹曼机相关的theano时, 在计算梯度grad的时候发现一个参数名字叫做consider_constant,来看看这个到底做了什么事情 参考博客: using consider_ ...

  4. 【theano-windows】学习笔记十一——theano中与神经网络相关函数

    前言 经过softmax和MLP的学习, 我们发现thenao.tensor中除了之前的博客[theano-windows]学习笔记五--theano中张量部分函数提到的张量的定义和基本运算外, 还有 ...

  5. 【theano-windows】学习笔记六——theano中的循环函数scan

    前言 Scan是Theano中最基础的循环函数, 官方教程主要是通过大量的例子来说明用法. 不过在学习的时候我比较习惯先看看用途, 然后是参数说明, 最后再是研究实例. 国际惯例, 参考网址 官网关于 ...

  6. SpringBoot学习笔记(9)----SpringBoot中使用关系型数据库以及事务处理

    在实际的运用开发中,跟数据库之间的交互是必不可少的,SpringBoot也提供了两种跟数据库交互的方式. 1. 使用JdbcTemplate 在SpringBoot中提供了JdbcTemplate模板 ...

  7. cockroachdb mysql_CockroachDB学习笔记——[译]CockroachDB中的SQL:映射表中数据到键值存储...

    CockroachDB学习笔记--[译]CockroachDB中的SQL:映射表中数据到键值存储 原文标题:SQL in CockroachDB: Mapping Table Data to Key- ...

  8. vue文件里在style的样式需要什么loader_Vue学习笔记之Webpack中css、less、图片等文件处理...

    一.webpack中使用css文件: loader是webpack中一个非常核心的概念,去转化webpack不能转化或打包的文件. 安装loader: 官网介绍: 安装: cnpm install - ...

  9. ASP.Net学习笔记015--ASP.Net中使用Cookie

    ASP.Net学习笔记015--ASP.Net中使用Cookie 表单数据欺骗: 原理跟收到欺骗短信一样,移动信号塔[基站],伪装的移动信号塔会屏蔽移动信号,并且 在信号范围内的手机会自动切换为接收伪 ...

  10. Java学习笔记1:Java中有关print、println、printf的用法和区别

    Java学习笔记1:Java中有关print.println.printf的用法和区别 最近在学习java,写一些笔记记录下. 1.print()函数是一般的标准输出,但是不换行. 2.println ...

最新文章

  1. 数据结构:字典树的基本使用
  2. 我的数据分析全系列教程,记录着那些大学奋斗的时光
  3. C# 2.0中泛型编程初级入门教程
  4. Firefox年内将默认启用AV1解码
  5. MySQL set names 命令_mysql set names 命令和 mysql 字符编码问题
  6. chrome浏览器的跨域设置,前端修改跨域问题
  7. 华硕z170a如何开启m2_跑得快也要站得稳,华硕灵珑II笔记本保护你的数据安全
  8. UVa 10935 - Throwing cards away I
  9. 杜克大学中国女博士7年奋斗历程
  10. elasticsearch两年学习资料整理分享
  11. ONLYOFFICE权限开发之二
  12. Win11系统输入法无法调出问题解决方法
  13. Intelligent Parking Building
  14. 邻域、邻接、通路、连通、连通集、区域概念区分​​​​​​​
  15. MicroLab专业的嵌入式开发调试工具集免费试用
  16. json转换工具Fastjson
  17. 数据分析:Day01软件安装及基础
  18. 基于小波变换的EMG信号病人数据matlab仿真分析
  19. vray 用于室内渲染的10大技巧,看进来!
  20. ArcGIS中建筑物图形简化工具和建筑物群聚合工具的应用

热门文章

  1. MPI MPI_Bcast (广播)用法详解
  2. 物体成瘾性_如何克服数字成瘾和更多的意志力
  3. ubuntu清空回收站命令
  4. Ubuntu安装音频编辑软件Audacity
  5. Android 框架MVP
  6. 低盈利、高现金流:紫光财报背后的半导体另类求生之路
  7. Django框架_day01
  8. iOS第三方开源库的吐槽和备忘 - 王培
  9. Day06(上)C++继承和派生
  10. ThinkPHP6 缩略图上传