C++里面四种强制类型转换
static_cast, const_cast, reinterpret_cast, dynamic_cast
static_cast:用于各种隐式转换,比如void*转ptr*
const_cast: 只能应用于指针引用,用来移除变量的const或volatile限定符;不要妄图去修改const,const_cast转化后的const仍然无法被修改
结论:可以改变const自定义类的成员变量,但是对于内置数据类型,却表现为未定义行为
dynamic_cast:安全的向下进行类型转换。只能用于含有虚函数的类,只能转指针或引用。
reinterpret_cast:允许将任何指针转换为任何其他指针类型,并不安全
1.C++能够直接实现隐式类型转换为什么还需要static_cast?
用于解决双隐式的情况,例如void*转ptr*
2.static_cast已经能解决类型转换的问题,那么为什么还需要reinterpret_cast?
对于无隐式的类型转换,static_cast已经不可用
3.const_cast脱常有什么作用?
void func (int& v){
}
const int a = 10;
func(a);//没有办法去传
因此将func改成
void func (const int& v){//本质上是对引用进行扩展
v=100;//×,不能对v进行修改
}
但是出现了另一个问题,此时如果不想改func就需要const_cast
func(const_cast<int &>(a));