C++的四种类型转换:
1 static_cast
用于内置的数据类型,还具有继承关系的指针或引用。
【注意】:若是内置数据类型指针,如int*、char*,或者没有继承关系的对象指针,都不能用static_cast。
//转换具有继承关系的对象指针
//父类指针转换成子类指针(不安全)
Animal *ani=nullptr;
Cat *cat=static_cast<Cat*>(ani);
//子类指针转成父类指针
Cat *soncat=nullptr;
Animal *anifather=static_cast<Animal *>(soncat);
//引用类似
Animal aniobj;
Animal &aniref=aniohj;
Cat &cat=static_cast<Cat&>(aniref);
Cat catobj;
Cat &catref=catobj;
Animal &anifather=static_cast<Animal&>(catref);
2 dynamic_cast
用于转换具有继承关系的指针或引用,在转换前会进行对象类型安全检查。
注意:dynamic_cast的对象一定是类的指针、引用或者void*。
【注意】:dynamic_cast只能转换具有继承关系的指针或引用,并且只能由子类型转换成基类型。
3 const_cast
指针、引用或对象指针,只能增加或去除变量的const性。
1)常量指针被转化为非常量的指针,并且仍然指向原来的对象;
2)常量引用被转换成非常量的引用,并且仍然指向原来的对象。
4 reinterpret_cast
强制类型转换,无关的指针类型,包括函数的指针都可以进行转换。
有些隐式类型转换存在危险:
涉及负值的运算,请注意,负值的转换。