c++要添加几种新式类型转换的原因:
1.旧式的类型转换几乎允许将任何其他类型转换成你需要的类型,这是非常拙劣的。
2.旧式的类型转换不容易辨识。
c++的四种新的类型转换:
static_cast:与旧式的类型转换功能一样,不可以在赋值类型不兼容的类型之间转换。如:将一个struct转换为int,或者将
一个int 转换成指针pointer。
const_cast:改变表达式中的常量性及易变性。例:
class A {....};
class B :public A {.....};
void fun(B *ptr);
A a;
B b;
const B& bb=b;
fun(&bb);//错误,将const类型传递给了非const类型
fun(const_cast<B*>bb);//正确
fun(&a);//错误,a是A类型,类型不同
fun(const_cast<B*>a);//错误,const_cast不能用于有继承关系的类。
3.dynamic_cast:应用在具有继承关系的向下转换中,且无法应用在没有虚函数的类型上。
4.reinterpret_cast:最不安全的类型转换。且与编译平台息息相关,不具有移植性。
最常用的用途是转换“函数指针”,尽量不要使用,除非万不得已。