C++ 各类型转换及关键字
volatile关键字
表示该变量易变,每次在访问该关键字修饰的变量时都要读内存,不对其进行优化。
mutable关键字
类的常成员函数在语义上是不允许修改类的成员变量的,但是有时候可能根据代码的需要并不是这么绝对。那么就可以使用mutable声明一个类的成员变量,它告诉编译器类的常成员函数可以修改这个变量。
explicit关键字
修饰构造函数,通常用作 构造函数静止隐式转换。
四种类型转换
1. const_cast
去掉类型的const或volatile属性。
const int a=10; int &b=const_case<int&>(a);
2. static_cast
静态类型转换,用于类型间强制转换。用于:
(1)基类和子类转换,子类指针转父类是安全的,父类转子类不安全。
(2)基本数据类型转换。
(3)空指针转换成目标类型指针。
(4)转换为void类型
int n=1; double d=static_cast<double>(n); int *pn=&n; double *d=static_cast<double*>(&n); void *p = static_case<void*>(pn);
3.dynamic_cast
动态类型转换,运行时类型安全检查(转换失败返回NULL)
1.安全基类和子类转换,基类转子类会失败。
2.必须有虚函数。
3.相同基类不同子类间转换,结果为NULL。
4.reinterpret_cast
重新解释类型,没有进行二进制转换。
一般用在函数指针类型之间转换。