摘自《C++标准程序库 (The Standard C++ Library)》pp.227
未摘齐,需要详细可参考6.9节:各种容器的运用时机
Categories
“cast”一词在英文里有“浇铸”的意思,还是挺形象的。
可以看做是利用一个原始值构建一个临时对象,并再设定初始值的时候使用类型转换。
例如:
float x; ... cout << static_cast<int>(x); //float to int ... cout << static_cast<string>("hello")); //char* to string
将多态类型(polymorphic type)成员向下转换为其对应的静态类型成员。这个cast是在运行时实时检验的,因此可以用来检测某个指针指向的对象到底是不是XXX类的。
class Car; //abstract class class Cabriolet : public Car {...}; class Limousine : public Car {...}; void f(Car* cp){ Cabriolet* p = dynamic_cast<Cabriolet*>(cp); if(p == NULL) { //cp is not referred to an object of Cabriolet } }
当参数是个引用,并且类别转换失败的时候,会抛出bad_cast异常哦。
去除某个对象的const修饰作用,也可以拿来去除volatile修饰作用。