看了一些网上的博客,整理了一些前辈们的思路,I am a burglar!端午节就这么过了,多年以后再回首吧。
命名的强制类型转换符号的一般形式如下:
cast_name<type>(expression);
其中, cast_name可以为dynamic_cast、static_cast、const_cast和reinterpret_cast的一种,type为转换的目标类型,而expression则是被强制转换的值。下面分别讲一下他们的具体含义。
1、const_cast
(2)常量引用被转换成非常量引用,并且仍然指向原来的对象;
(3)常量对象被转换成非常量对象。
#include<iostream>
using namespace std;
int main()
{
int num = 10;
const int* ptr = #
//int* ptr1 = ptr; //A
int *ptr1 = const_cast<int*>(ptr)
*ptr1 = 15;
cout<<*ptr<<endl;;
return 0;
}
A行的赋值将会产生编译错误,不能将const int*转换为int*2、static_cast
(1)static_cast用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。static_cast只能提供编译时的安全。进行上行转换(把派生类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的。(如果原先基类指针指向的是基类,那么这么做就会出错)。static_cast不能在兄弟之间进行转换。
(2)用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发人员来保证。
(3)把空指针转换成目标类型的空指针;把任何类型的表达式转换成