1、如果两个类型可以相互转换,就说他们是关联的。

2、隐式转换是指,由编译器自行转换,而不需要程序员介入的转换。

3、以下情况,编译器会发生隐式转换:

  1)在大多数表达式中,比int类型小的整型值会被提升为较大的整型值。

  2)在条件语句中,非布尔类型会被转换成布尔类型。

  3)初始化过程中,初始值的类型转换成变量的类型时,赋值运算符的右侧运算对象的类型会被转换成左侧 运算对象的类型。

  4)如果算术运算符或关系运算符的运算对象有多种类型,需要转换成同一种类型。

  5)函数调用,也会发生类型转换。

4、算术转换的规则,就是运算符的运算对象不管是什么类型,都会被转换成最宽的那个类型。例如,如果有一个运算对象的类型是long double,那么不管另一个运算的对象的类型是什么,都会被转换成long double。

5、整型提升,就是把较小的整型数类型转换成较大的整型数类型,对于比int类型小的整数类型,都会被提升为int类型,否则,提升为unsigned int。而较大的char类型会被提升为int、unsigned int、long、unsigned long、long long和unsigned long long中的最小的一种类型。

6、其他的隐式转换:1)数组转换成指针,大多数情况下,数组会自动转换成指针类型,但是如果是decltype关键字的参数,取地址运算符,sizeof运算符及typeid运算符的运算对象时,不会转换,并且如果使用一个引用去初始化数组,也不会转换。

           2)指针的转换,常量整数值0、字面值nullptr都能转换成任意指针类型,指向任意非常量对象都能转换为void *类型,指向任意对象的指针都能转换为const void*类型。

            a)指针还能转换成bool类型,如果指针的值为0,则转换结果为false,否则为true;

            b) 转换成常量,允许一个指向非常量的指针或者引用转换成一个指向常量的指针,不存在相反的转换。

           3)类类型的定义的转换,类类型能定义由编译器自动执行的转换,不过编译器每次只能执行一种类类型的转换。

7、 一般情况下使用强制类型转换是非常危险的。

8、新标准下,命名的强制转换形式:cast-name<type>(expression);  type是要转换成的目标类型,而expression是要转换的值。若type是引用类型,则其结果是左值。其中cast-name是static_cast、dynamic_cast、const_cast和reinterpret_cast中的一种。

9、dynamic_cast支持运行时识别。任何具有明确定义的类型的转换,只要不包含底层Const,都可以使用static_cast。并且前面说到不能访问void*指针,但是通过static_cast强制转换可以将其转换成普通指针。注意,强制转换前后指针的值保持不变,并且转换前后指针所指的类型必须保持一致,否则会出现未定义的行为。

10、const_cast只能改变运算对象底层const,一般用于转换常量对象为非常量对象,也就是有去掉const的性质。

11、reinterpret_cast为运算对象的位模式上提供较低层次的重新解释。其本质上依赖于机器,也就是说要对涉及类型和编译器实现类型转换的过程都非常的了解。

12、《C++ primer fifth》建议我们避免使用强制类型转换,因为强制类型转换干扰了编译器正常的类型检查,在实际的编程中,应该对强制类型转换的类型做个记录,以便于发生错误时查找。

13、早期版本的C++,有两种强制类型转换,一种是type(expr),一种是(type)expr,前者是函数形式的强制类型转换,后者是C语言风格的强制类型转换。

14、可以使用static_cast和const_cast替换旧版本的强制转换类型,若合法,则其行为与对应的命名转换一致。若替换后,不合法,则旧式强制类型转换与reinterpret_cast类似的功能。

15、旧式的类型转换与命名的强制类型转换的区别在于,旧式类型转换的表现形式不那么清晰,一旦转换出现问题,很难追踪。

C++类型转换的注意事项的更多相关文章

  1. JAVA基本数据类型转换的注意事项

    JAVA中基本数据类型: 类型: 字节: 范围: 默认值: byte 1 -128~127 0 short 2 -32768~32767 0 char 2 0~65535 '\u0000' int 4 ...

  2. 在Python中数据类型转换的注意事项

    在学习Python的过程接触到了数据类型转化这一过程,在实践的过程中我发现了一个小问题,我们在平常的使用中要一定注意 在str型转换成int型的过程中,str内的内容必须是整数不然会报错 如图: 在转 ...

  3. C++:类型转换

    5.3 类型转换 5.3.1 系统预定义类型间的转换 1. 隐式转换: 例如: int x=5,y;             y=3.5+x; //系统会自动先将int型的5转换为double型的5. ...

  4. 【黑马JavaSE】1.1JavaSE、环境变量、CMD使用、常量、变量、数据类型转换(自动/强制)、ASCII码表、Unicode万国码表

    文章目录 SUN公司,詹姆斯.劳瑟琳,Java祖师爷 Java语言开发环境搭建 把Java添加到环境变量的方法 命令行CMD里一些报的错误 命令控制行常用操作的代码展示 Notepad++.注释.标识 ...

  5. (转)C#调用非托管Win 32 DLL

    转载学习收藏,原文地址http://www.cnblogs.com/mywebname/articles/2291876.html 背景 在项目过程中,有时候你需要调用非C#编写的DLL文件,尤其在使 ...

  6. C#图解教程 第二十五章 其他主题

    其他主题 概述字符串使用 StringBuilder类把字符串解析为数据值关于可空类型的更多内容 为可空类型赋值使用空接合运算符使用可空用户自定义类型 Main 方法文档注释 插入文档注释使用其他XM ...

  7. Java基本类型与运算

    问题及答案来源自<Java程序员面试笔试宝典>第四章 Java基础知识 4.4基本类型与运算 1.Java提供了哪些基本数据类型? Java一共提高了八种原始的数据类型:byte.shor ...

  8. Java面试题_第一阶段(static、final、面向对象、多线程、集合、String、同步、接口、GC、JVM)

    1.1 简述static和final的用法? static:修饰属性,方法,代码块 (1)静态属性:也可叫类变量  类名.属性名  来访问 (共有的类变量与对象无关,只和类有关) 注意:类中的实例变量 ...

  9. Day04:继承的意义(下)

    对象转型 向上造型 什么是向上造型? 子类对象赋给父类引用. 父类引用指向子类对象. 子类转成父类 默认进行(父类引用指向子类对象). 为什么需要向上造型? 子类对象可以放入父类类型的数组中. 父类数 ...

随机推荐

  1. 20165327 学习基础和C语言基础调查

    学习基础和C语言基础调查 一.关于技能 1. 你有什么技能比大多人(超过90%以上)更好? 根据数据来看,应该是短跑(几次测速50米平均时间6.5s),上学期的体测中短跑这项成绩在班上排前面,我们这个 ...

  2. Entity Framework 6 学习笔记2 — 增、删、改、显示简单代码示例

    前言 通过 “Entity Framework 6 学习笔记1 — 介绍和安装方法”文章我相信大家对EF的安装应该没什么问题了,整体安装还是比较简单的,只需要通过Nuge搜索EF然后安装就可以了,这也 ...

  3. Okhttp 插入缓存拦截器 解析

    我们在做网络请求的时候,如果网络请求过于频繁而且请求的数据变动不大,或者基本没有变动,这个时候如果没有缓存功能,我们想一下 会浪费掉多少资源,一次请求刷新一次,去请求一次,不但会消耗用户的流量,而且还 ...

  4. display: flex的兼容性写法

    display: -moz-box; /*firefox*/ display: -ms-flexbox; /*IE10*/ display: -webkit-box; /*Safari*/ displ ...

  5. reflow 和 repaint

    Reflow(渲染):对于DOM结构中的各个元素都有自己的盒模型,浏览器根据各种样式(浏览器的.开发人员定义的等)来计算,并根据计算结果将元素放到它该出现的位置,这个过程称之为reflow. refl ...

  6. 创建型模式篇(单例模式Single Pattern)

    一.单例模式(Singleton Pattern) 单例模式要求一个类只能有一个实例,并且提供了一个全局的访问点. 比如说,中国主席的职位是Singleton,法律规定主席选举,任何时间只能有一个主席 ...

  7. 十、 持久层框架(MyBatis)

    一.基于MyBatis动态SQL语句 1.if标签 实体类Product的字段比较多的时候,为了应付各个字段的查询,那么就需要写多条SQL语句,这样就变得难以维护. 此时,就可以使用MyBatis动态 ...

  8. ActiveMQ 到底是推还是拉?

    http://activemq.apache.org/destination-options.html 1. consumer 的配置参数如下图: 配置consumer的示例: public void ...

  9. SSL证书读取

    证书内容: MIIDhDCCAmygAwIBAgIFAV0Imw0wDQYJKoZIhvcNAQELBQAwXDEnMCUGA1UEAwweczUwLTYyLTEzNS0xNS5zZWN1cmVzZX ...

  10. 小程序-wepy学习

    组件通信与交互 推荐网址:https://tencent.github.io/wepy/document.html#/?id=%e7%bb%84%e4%bb%b6%e9%80%9a%e4%bf%a1% ...