C++中的类型转换

原创 2013年12月04日 21:22:00

C++中类型转换分为两种:强制类型转换和隐式类型转换。常见的强制类型转换有:const_cast、static_cast、dynamic_cast、reinterpret_cast;隐式类型转换分为常见内置类型的隐式转换和类类型的隐式转换。

强制类型转换: 

1.        Const_cast:去除原先类型(常量指针和引用)的Const属性;

2.        Static_cast:

1)        子类向基类类型转换,转换安全,但建议用dynamic_cast;

2)         把空指针转换成目标类型的空指针;

3)        任何类型的表达式转换成void类型;

3.        Dynamic_cast:

1)        有条件转换,动态类型转换,运行时类型安全检查(转换失败返回NULL);

2)        主要用于父类和子类类型的相互转化,由于在运行时会做安全检查,所以子类向父类转换时是安全的;

4.        Reinterpret_cast: 仅仅重新解释类型,但没有进行二进制的转换;

隐式类型转换:

1.        常见内置类型的隐士转换;

2.        类类型的隐士转换:

当出现以下情况时会发生隐式类型转换:

1)        类构造函数只有一个参数,而且没有explicit关键字来防止自动类型隐式类型转换;

2)        适用operator T ( )的形式对隐式类型转换的重载(operator的作用有两个:运算符重载和隐士类型转换重载)

Reference:

1)        http://blog.csdn.net/touzani/article/details/1637655

2)        http://www.e800.com.cn/articles/2011/0721/491543.shtml

3)        http://blog.csdn.net/txgc1009/article/details/6675234

4)        http://www.cnblogs.com/Ray-chen/archive/2011/11/29/2267394.html


C++中的#,##,和"

想要灵活应用宏,离不开#和##。 " 在学习#和##之前,先来看一个关于"的例子: #include #include int main() { const char* p1 = ...
  • mzlogin
  • mzlogin
  • 2014年11月09日 22:47
  • 7591

C++中的::的作用

(1)作用域限定符,当在类体中直接定义函数时,不需要在函数名字的前面加上类名,但是在类体外实现函数定义的时候,必须加上类名并且加上作用域限定符。Student::Display(); (2)...
  • zhanghuaichao
  • zhanghuaichao
  • 2017年02月18日 21:44
  • 2261

浅论C++的复杂性

C++语言已经有了20多年的历史。作为一门影响广泛的编程语言,它所受到的关注和争论恐怕是任何一门其他的语言所不能比拟的。十几年前,Java等新生语言的出现曾导致“C++信任危机”,但最终C++以自身非...
  • K346K346
  • K346K346
  • 2015年12月05日 11:56
  • 1738

C++笔试题目大全(笔试宝典)(不断完善中)

1.new 、 delete 、 malloc 、 free 关系 delete 会调用对象的析构函数 , 和 new 对应 free 只会释放内存, new 调用构造函数。 malloc 与 f...
  • Lina_ACM
  • Lina_ACM
  • 2016年06月07日 13:29
  • 21419

c/c++中指针的理解(初学者)

关于指针,大家肯定不陌生,一些初学者,想必会出现思绪混乱的情况,现在我就来帮大家缕一缕吧。(第一次写微博 有点小紧张) 大家应该了解一些计算机对内存的管理方式吧。操作系统会将内存单元进行编号,这些...
  • Allen_ww
  • Allen_ww
  • 2016年01月11日 19:41
  • 8788

没事写点啥(一)——C++扫雷

整天编学校的作业实在枯燥,不如……写点别的?
  • destinyson
  • destinyson
  • 2016年02月29日 14:17
  • 1762

C/C++中“#”和“##”的作用和用法

C/C++中“#”和“##”的作用和用法!
  • fengbingchun
  • fengbingchun
  • 2015年03月08日 16:15
  • 3385

C++ 进程间的通讯(一):简单的有名管道实现

进程间的通讯(一):简单的有名管道实现 一 管道简介 命名管道(Named Pipe)是服务器进程和一个或多个客户进程之间通信的单向或双向管道。不同于匿名管道的是命名管道可以在不相关的进程...
  • u010797208
  • u010797208
  • 2014年11月28日 02:09
  • 6576

OpenCV中Mat的C++用法介绍

Mat       OpenCV 自 2001 年出现以来。在那些日子里库是围绕C接口构建的。在那些日子里,他们使用名为IplImage C 的结构在内存中存储图像。这是您将在大多数较旧的教程和...
  • wadefan7
  • wadefan7
  • 2015年03月05日 15:53
  • 4295

关于C和C++一些大神们的讨论

知乎上曾经有一个关于C和C++语言的讨论,弄的沸沸扬扬。余天升 开源社区一直都不怎么待见C++,自由软件基金会创始人Richard Stallman认为C++有语法歧义,这样子没有必要、非常琐碎还会...
  • wangshubo1989
  • wangshubo1989
  • 2016年02月23日 20:33
  • 2637
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++中的类型转换
举报原因:
原因补充:

(最多只允许输入30个字)