C++面经(一)
1、类型转换
1.1 、static_cast
double d = 1.234;
int a = static_cast<int>(d);
用于非多态类型的静态转换,不能用于两个不相关类型之间的转换。
常用于子类的指针或引用 向上转换成 基类的指针或引用 --> 安全(反之,基类转换成子类是不安全的);
1.2、const_cast
const int a = 2;
int* p = const_cast<int*>(&a);
*p = 3;
cout << a ; // 3
用于强制去除类似于被const修饰的常数特性。
即:删除变量的const属性,可以给const对象重新赋值。
1.3、dynamic_cast
用于将基类的引用或指针 转换成 子类的引用或指针(弥补static_cast转换的不足)
注意事项:1、dynamic_cast父类转成子类时,父类必须含有虚函数。2、dynamic_cast转换之前,会先做安全检查(能成功就转换,不能转换返回0)
1.4、reinterpret_cast
int a = 1;
int* p = reinterpret_cast<int*>(a); // 用static_cast就会报错
reinterpret_cast一般用于强制类型转换(指针/引用->整形,整形->指针/引用)