C++当中的几种强制类型转换

原创 2016年08月31日 14:50:32

在C++当中,我们不推荐继续使用C类型的强制转化,而是使用标准C++的类型转换符,标准C++中有四个类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。下面对它们一一进行介绍。

static_cast

只要是不包含底层的const,我们都可以使用static_cast,当需要一个较大的算数类型赋值给较小的类型的时候,这个时候static_cast非常有用。这个时候就相当于你告诉了编译器,我们知道并且不在乎精度的损失。
另外,static_cast还可以对void指针转换成想要的类型的指针。但是这里面我们需要确保转换后得到的类型就是指针所指的类型,如果类型不符合,会产生未定义的后果。

用于类层次结构中基类和子类之间指针或引用的转换。进行上行转换(把子类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成子类指针或引用)时,由于没有动态类型检查,所以是不安全的。
只是适用于可以实现隐式类型转化的相关类型。否则会出现错误。
用法:static_cast < type-id > ( expression )

const_cast

只改变常量属性。
常量指针被转化成非常量指针,并且仍然指向原来的对象;常量引用被转换成非常量引用,并且仍然指向原来的对象;常量对象被转换成非常量对象。
可以称作为去掉常属性。

只有const_cast能改变表达式的常量属性,使用其他类型会出现编译器错误。同样,不能改变表达式的类型。
用法:const_cast < type-id > ( expression )

reinterpret_cast

用于将一种类型转换为另一种类型,只适用于不相关的类型,这种类型转换的权限很大。比如:它可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针(先把一个指针转换成一个整数,在把该整数转换成原类型的指针,还可以得到原先的指针值)。

因为它通常会为运算对象的位模式提供较低层次上的重新解释,所以权限大。

所以,带来的问题是它很危险。它本质上是依赖于机器,所以想要安全的使用它必须对相关类型和编译器实现转换的过程非常了解才行。

用法:reinpreter_cast (expression)

dynamic_cast

动态转化,用于将一个基类对象指针/引用转换为拍摄类对象指针/引用。

向上转型:子类对象指针->父类指针/引用(不需要转换)
向下转型:父类对象指针->子类指针/引用(用dynamic_cast转型是安全的)
1 . dynamic_cast只能用于含有虚函数的类
2 . dynamic_cast会先检查是否能转换成功,能成功则转换,不能则返回0。
用法:dynamic_cast < type-id > ( expression )

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

C++中4种强制类型转换

不过为了完成强制类型转换,C++中已经为我们提供了4中标准方法,它们是dynamic_cats, static_cast, const_cast, reinterpret_cast,用法形式为:dyn...

C++中四种强制类型转换

static_cast dynamic_cast const_cast reinterpret_cast 作用 实现C++中内置基本数据类型之...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

C++的四种强制类型转换

原文:http://www.cnblogs.com/alexqdh/archive/2011/06/09/2075713.html  C++的四种强制类型转换,所以C++不是类型安全的。分别为:...

C++的四种强制类型转换

一直以来,Coding时沿袭了在C语言中编程的习惯,在对不同类型数据作转换时,也按照C语言的处理方法,如下: 在C语言中,在进行自动类型转换的时候,如果原来的数是无符号数,那么在扩展的时候,高位填充...

c++ 四种强制类型转换介绍

c++ 四种强制类型转换介绍const_cast , static_cast , dynamic_cast , reinterpret_cast1.

【010】高级强制类型转换

要点总结   我们用传统的强制类型转换实现:把所需要的指针类型放在一对圆括号之间,然后写出将被强制转换的地址值。 Company *company = new Company(“AP...

【C++】static_cast, dynamic_cast, reinterpret_cast, const_cast区别比较

(使用vs2010所带的编译器) 转载自 http://www.cnblogs.com/jerry19880126/ 隐式转换(implicit conversion) short a...

C++中强制转换

C++中的四种强制转换类型的有什么不同,或者是说用法的不同? dynamic_case,static_case的不同? 修改了其中的一处笔误:reinterpret_cast 错写成reinprete...

初探C++强制类型转换学习笔记

强制类型转换   static_cast、interpret_cast、const_cast和dynamic_cast
  • wxwd1
  • wxwd1
  • 2014-07-07 13:42
  • 575

逐梦C++之四:四种强制类型转换

1.总括四种强制类型转换static_cast const_cast dynamic_cast reinterpret_cast2.static_caststatic_cast是最常用的强制类型转换,...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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