我们在上一篇文章中为大家详细介绍了C++隐式转换发生的四种情况,相信大家应该会对这一数据类型转换方式有一个详细的了解啦。那么在这里,将会为大家详细介绍其中的另一种转换方式,C++显式转换的基本内容。#t#
C++显式转换包含四种转换
static_cast : 编译期的转化,不能转换掉exdivssion的const、volitale、或者__unaligned属性
*所有内建类型对象之间的隐式转换都可用static_cast.
*把空指针转换成目标类型的空指针用static_cast。
*把任何类型的表达式转换成void类型用static_cast。
*类层次间的上行转换和下行转换也可以用static_cast,但下行转换即当把基类指针或引用转换成子类表示时,由于没有动态类型检查,所以是不安全的.反之是安全的.
dynamic_cast : 运行期的转换,类层次间的上行转换和下行转换
* dynamic_cast具有类型检查的功能,下行转换的效果跟static_cast是一样的,但下行转换比static_cast更安全。
* dynamic_cast还支持交叉转换,两个类如果有共同的祖先,他们的指针就可以用dynamic_cast.
const_cast : 编译期的转化,类型中的常量
reinterpret_cast : 任何指针都可以转换成其它类型的指针,可用于如char* 到 int*,或者One_class* 到 Unrelated_class* 等的转换,因此可能是不安全的。
C++内建类型指针之间不含有隐式转换(void * 除外),需要C++显式转换。
- int ival = 0;
- char* pc = NULL;
- int* pi = NULL;
- void* pv = NULL;
- const char* pcc = "Hello world";
- const int* pci = &ival;
- const void* pcv = NULL;
- pc = pi; //错误,没有标准的隐式转换.
- pc = reinterpret_cast<char*>(pi);
//必须使用reinterpret_cast 在位模式层次的显式转换- pc = pv; //错误,没有标准的隐式转换.
- pc = static_cast<char*>(pv); //static_cast显式转换
- pc = pcc; //错误,没有标准的隐式转换.
- pc = const_cast<char*>(pcc); //const_cast显式转换
- pc = pcv; //错误,没有标准的隐式转换.
- pc = static_cast<char*>(const_cast<void*>(pcv));
//先const_cast 后 static_cast.- pv = pc; // OK; 隐式转换到void*
- pv = pi; // OK; 隐式转换到void*
- pv = pcc; //错误,没有标准的隐式转换.
- pv = const_cast<char*>(pcc);
//OK, const_cast显式转换,并且char* 隐式转换到void*- pv = pcv;//错误,没有标准的隐式转换.
- pv = const_cast<void*>pcv;//OK, const_cast显式转换.
- pcpcc = pc; // OK; 隐式转换到const char*
- pcc = pi; // 错误,没有标准的隐式转换.
- pcc = reinterpret_cast<char*>(pi);
//必须使用reinterpret_cast 在位模式层次的显式转换.- pcc = pv; // 错误,没有标准的隐式转换.
- pcc = static_cast<char*>(pv); //static_cast显式转换
- pcc = pci;// 错误,没有标准的隐式转换.
- pcc = reinterpret_cast<char*>pci;
//必须使用reinterpret_cast 在位模式层次的显式转换.- pcc = pcv;//错误,没有标准的隐式转换.
- pcc = static_cast<const char*>(pcv); //static_cast显式转换.
- pcv = pv; // OK; 隐式转换到const void*
- pcpcv = pc; // OK; 隐式转换到const void*
- pcv = pi; // OK; 隐式转换到const void*
- pcv = pcc;// OK; 隐式转换到const void*
以上就是对C++显式转换的一些基本介绍。