C++中,四个与类型转换相关的关键字:static_cast、const_cast、reinterpret_cast、dynamic_cast。

1.static_cast------运算符完成相关类型之间的转换**

特点:静态转换,在编译处理期间。

使用场景:主要用于C++中内置的基本数据类型之间的转换,但是没有运行时类型的检测来保证转换的安全性。如在同一类层次结构中的一个指针类型到另一个指针类型,整型到枚举类型,或者浮点型到整型等。

例:  1,  int m=10;

     double n=static_cast < double> m;

    2, void* p = &d;

double * q=static_cast < double* > (p);

注意:

  1. 用于基类和子类之间的指针或引用之间的转换,这种转换把子类的指针或引用转换为基类表示是安全的;进行下行转换,把积累的指针或引用转换为子类表示时,由于没有进行动态类型检测,所以是不安全的。
  2. 把void类型的指针转换成目标类型的指针(不安全)。
  3. 不能用于两个不相关的类型转换。
  4. 不能把const对象转换成非const对象。

2.const_cast用来移除或添加变量的const。

特点:去常转换,编译时执行。
应用场合:const_cast操作不能在不同的种类间转换。相反,它仅仅把它作用的表达式转换成常量。它可以使一个本来不是const类型的数据转换成const类型的,或者把const属性去掉。

例: const char *pc;

char *p = const_cast<char*>(pc);

3.reinterpret_cast------处理互不相关类型之间的转换

特点: 重解释类型转换
应用场合:它有着和c风格强制类型转换同样的功能;它可以转化任何的内置数据类型为其他的类型,同时它也可以把任何类型

的指针转化为其他的类型;它的机理是对二进制进行重新的解释,不会改变原来的格式。

如从整型到指针,一种类型的指针到另一种类型的指针等

例: int a=10;

   double* b=reinterpret_cast<double*>(a); //b的转换结果为0x0000000a

4.dynamic_cast------处理基类型到派生类型的转换(这个说法不是很准确,为了好理解先这么写)

dynamic_cast < type-id > ( expression )

该运算符将expression转换成type_id类型的对象。type_id必须是类的指针,类的引用或者空类型的指针。

  a、如果type_id是一个指针类型,那么expression也必须是一个指针类型,如果type_id是一个引用类型,那么expression也必须是一个引用类型。

  b、如果type_id是一个空类型的指针,在运行的时候,就会检测expression的实际类型,结果是一个由expression决定的指针类型。

  c、如果type_id不是空类型的指针,在运行的时候指向expression对象的指针能否可以转换成type_id类型的指针。
  d、在运行的时候决定真正的类型,如果向下转换是安全的,就返回一个转换后的指针,若不安全,则返回一个空指针。

  e、主要用于上下行之间的转换,也可以用于类之间的交叉转换。上行转换时和static_cast效果一样,下行转换时,具有检测功能,比static_cast更安全。

c++中4个与类型转换相关的关键字总结相关推荐

  1. C++中,有哪4种与类型转换相关的关键字?各有什么特点?应该在什么场合下使用?

    C++中,四个与类型转换相关的关键字:static_cast.const_cast.reinterpret_cast.dynamic_cast. 一.static_cast 特点:静态转换,在编译处理 ...

  2. c++有哪四个类型转换相关的关键字

    [面试题]c++有哪四个类型转换相关的关键字? 在C/C++语言中用 (type) value(在C++还可以采用type(value))来进行显式类型转换(explicit type convers ...

  3. 深入理解C++中五种强制类型转换的使用场景

    深入理解C++中五种强制类型转换的使用场景 1.C风格的强制类型转换 2.C++风格的强制类型转换 2.1.static_cast 2.1.1.用于基本内置数据类型之间的转换 2.1.2.用于指针之间 ...

  4. python列表方法语句_Python中列表和元组的相关语句和方法讲解

    列表(list): 首先,列表属于序列,那么序列类型可用如下内建函数-- list(iter):把可迭代对象转换为列表. str(obj):把obj对象转换为字符串,即用字符串来表示这个对象. tup ...

  5. 计算机在中职教育中的运用论文,中职计算机教育的相关论文(2)

    中职计算机教育的相关论文篇二 <中职计算机教育中实践能力的培养> [摘要]本文以中职计算机教育中实践能力的培养为题展开论述.首先,分析了当前在中职计算机实践能力培养方面存在的问题.然后,结 ...

  6. python类型转换-Python中如何进行数据类型转换?

    原标题:Python中如何进行数据类型转换? 这一次要讲的是Python中的数据类型转换,Python中的数据类型转换是什么?就是将数据由当前类型变化为其他类型的操作就是数据类型转换.数据类型转换分为 ...

  7. android中关于手机屏幕的相关操作(获取屏幕的宽高等操作)

    这里总结下android中关于手机屏幕的相关操作: 1.获取屏幕的分辨率(因为android中处理显示的时候,需要根据屏幕分辨率的不同才去不同的布局或显示不同的素材) <uses-sdk and ...

  8. Python之pandas:pandas中常见的数据类型转换四大方法以及遇到的一些坑之详细攻略

    Python之pandas:pandas中常见的数据类型转换四大方法以及遇到的一些坑之详细攻略 目录 pandas中常见的数据类型转换方法 T1.读取时直接转换数据类型 T2.采用astype

  9. C++与类型转换相关的四个关键字

    为什么80%的码农都做不了架构师?>>>    C++与类型转换相关的四个关键字有:const_cast.static_cast.dynamic_cast.reinterpret_c ...

最新文章

  1. css对称旋转,CSS3 transform平面旋转
  2. Android多媒体扫描过程(Android Media Scanner Prosess)
  3. 数据库-数据库设计-5个
  4. (运维日志)在win7安装Oracle并部署Oracle数据库
  5. 如何命令行远程连接centos_如何使用windows远程控制centOS桌面
  6. 阿里技术面:ReadWriteLock读写之间互斥吗?
  7. tf.shape()和tf.reshape()
  8. Android SEAndroid
  9. 标准C程序设计七---121
  10. mysql-mmm+amoeba+keepalived实现mysql高可用和读写分离(二)
  11. C#编程之SqlHelper
  12. java自动生成一年中工作日和休息日(公休日及假期国家法定假日)
  13. 创建一维数组,存储班级中10位同学的年龄信息,并求出班级同学的平均年龄。找出班级中的最小年龄和最大年龄。(冒泡排序)
  14. openairinterface5g基站老版eNB部署
  15. java发送带图片的邮件_java项目如何发送带图片的邮件
  16. Vue项目引入animated
  17. android 解决微信登录白屏样式问题
  18. 怎么把word压缩到最小
  19. 智能微电网的核心技术
  20. 条件概率的本质是样本空间的缩减

热门文章

  1. Django添加MySQL数据库
  2. 单张图片上传预览【超简洁,未完待续】
  3. 获取指定路径下所有PDF文件的总页数
  4. 【已验证】帝国cms 里 栏目列表模板获取同级栏目
  5. Java——链表的增删查改
  6. 分享:MySQL 学习笔记(二)
  7. 设计模式的七大设计原则:其四:里氏替换原则
  8. jmeter html测试脚本,Jenkins如何实现自动运行jmeter脚本并出具报告
  9. Python 字符串(三)
  10. 你需要知道的css布局