C++ 之 强制转换

Posted hit-ycy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 之 强制转换相关的知识,希望对你有一定的参考价值。

        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++ 之 强制转换的主要内容,如果未能解决你的问题,请参考以下文章

C++中的数据类型强制转换

c和c++中,对结构体进行强制类型转换!

C++强制类型转换

C++中“强制转换”的四大天王

C++ --- 强制转换运算符

C++强制类型转换