dynamic_cast<new_type>(var)
reinterpret_cast<new_type>(var)
static_cast<new_type>(var)
const_cast<new_type>(var)
1. dynamic_cast:
(1)运行时,检查转换;
(2)基类中一定要有虚函数(不能用于基础类型),否则编译不通过;
(3)成功的话返回的是指向类的指针或引用,转换失败的话则会返回NULL; (更多请查看,引文《C++中四种类型转换方式》)
2. reinterpret_cast:
(1) reinterpret的意思是重新解释,此标识符的意思即为数据的二进制形式重新解释,但是不改变其值。
(2) 有着和C风格的强制转换同样的能力。它可以转化任何内置的数据类型为其他任何的数据类型,也可以转化任何指针类型为其他的类型。
(3) 它甚至可以转化内置的数据类型为指针,无须考虑类型安全或者常量的情形。不到万不得已绝对不用。
3. static_cast:
(1)可以实现C++中内置基本数据类型之间的相互转换,enum、struct、 int、char、float等;
(2)它不能进行无关类型(如非基类和子类)指针之间的转换;
(3)如果涉及到类的话,static_cast只能在有相互联系的类型中进行相互转换,不一定包含虚函数。
4. const_cast:
(1)去掉const属性:const_case<int*> (&num),常用,因为不能把一个const变量直接赋给一个非const变量,必须要转换。
(2)加上const属性:const int* k = const_case<const int*>(j),一般很少用,因为可以把一个非const变量直接赋给一个const变量,比如:const int* k = j;
另外:
double x = 10.3;
int y;
y = int (x); // functional style cast(构造函数zhuan'h)
y = (int) x; // c-style cast (C风格强转)
(1) 尽可能不使用c风格的类型强转
(2) 可以使用构造函数(函数式转换)代替
参考:
[1] C++四种类型转换机制
[2] C++中四种类型转换方式