码迷,mamicode.com
首页 > 编程语言 > 详细

C++ 之 强制转换

时间:2019-05-10 20:42:14      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:blog   问题   不同   span   而在   类类型   amp   print   强制转换   

        C语言当中的强制转换基本没有任何的限制,只需要一个括号即可,而在C++中,对强制转换有了一定的限制,这样避免了我们在使用时造成的不明确问题,同时也增加了代码的可读性。一共有四种,分别时static_cast、reinterpret_cast、const_cast、dynamic_cast。

1.static_cast转换

      可以实现相同类型之间的转换,如:double b ;int  a = static_cast<int>(b); 

2.reinterpreter_cast 转换

     可以实现不同类型之间的转换,如指针到整型

int* aas = new int[1] ;
aas[0] = 1;
int b = reinterpret_cast<int>(aas);   ////b中的值为aas 指针的地址

3.const_cast 转换

       const_cast 中的类型必须时指针、引用或指向对象成员类型的指针

const int constA = 10;
const int *pConstA = &constA;
int* b = const_cast<int*>(pConstA);
*b = *b + 1;
printf("%d ,%d",constA,*b);/////10  11     可以发现constA中的值并没有发生变化,因为constA是一个常量,若constA没有const的修饰,最后的结果将是11  11 

4.dynamic_cast 转换

      dynamic_cast实现的是多态类之间的的转换

对于“向上转换”(即派生类指针或引用类型转换为其基类类型),无论是指针还是引用向上转换都是安全地。

对于“向下转型”有两种情况:
一种是基类指针所指对象是派生类类型的,这种转换是安全的;
另一种是基类指针所指对象为基类类型,在这种情况下dynamic_cast在运行时做检查,转换失败,返回结果为0;
https://blog.csdn.net/u010275850/article/details/49452373    我觉得这篇博客对于dynamic_cast的转换好理解

C++ 之 强制转换

标签:blog   问题   不同   span   而在   类类型   amp   print   强制转换   

原文地址:https://www.cnblogs.com/hit-ycy/p/10846466.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!