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. Asp.net core 学习笔记 ( Azure key-vault )

    参考 : https://docs.microsoft.com/en-us/aspnet/core/security/key-vault-configuration?view=aspnetcore-2 ...

  2. Java 动态图片压缩

    今天收到领导的一个任务,说是图片太大导致服务器那边无法解析,要求图片大小大于102*126就压缩大小为102*126.同时文件是以Base64字符串的形式传过来的.具体压缩方法如下: /** * 图片 ...

  3. OSPF - 3,OSPF区域和LSA

    1,四种末端区域骨干区域和标准区域:1,2,3,4,5,包含5类LSA,为了减少某些普通区域的LSA(主要就是4类和5类,有时做绝到连3类也不要了),引入了末梢区域.同时为了确保数据能出去,一般ABR ...

  4. 使用VisualStudio进行脚本|样式文件压缩

    在vs的Optimization中有个Bundle是专门用来压缩样式和脚本文件 .他有两个继承:StyleBundle.ScriptBundle,从名字上就可看出,StyleBundle专门压缩样式文 ...

  5. android------Eclipse Memory Analyzer (MAT)

    简单介绍 MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速.功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗. 使用内 ...

  6. linux网络配置命令(二)——ip

    ip命令 查看/设置路由.设备.路由策略和渠道信息 格式 ip [ OPTIONS ] OBJECT { COMMAND | help } OBJECT := { link | addr | addr ...

  7. kohana导入和导出

    一.导入 ini_set('memory_limit', '512M'); require_once(Kohana::find_file('vendor', 'PHPExcel/PHPExcel/IO ...

  8. Git将本地项目上传到GitHub

    本文转载于:https://segmentfault.com/a/1190000011909294 https://www.cnblogs.com/cxk1995/p/5800196.html 我们使 ...

  9. sqlite3 删除数据

    cx = sqlite3.connect("c:/数据库地址") # 打开数据库cu = cx.cursor()# delete the rowcu.execute("d ...

  10. MongoDB\BSON\UTCDateTime::toDateTime

    示例# 1 MongoDB \ BSON \ UTCDatetime:toDateTime()例子 <?php $utcdatetime = new MongoDB\BSON\UTCDateTi ...