1、概述
去const属性用const_cast。
基本类型转换用static_cast。
多态类之间的类型转换用daynamic_cast。
不同类型的指针类型转换用reinterpreter_cast。
2、详解加示例
a> const_cast
用法:const_cast<类型>(表达式)
用途:删除const属性
示例及结果:
int a=3;
const int *b=&a;
int *c=const_cast<int*>(b);
*c=4;
std::cout<<"value: "<<*c<<" "<<*b<<" "<<a<<std::endl;
std::cout<<"address:"<<c<<" "<<b<<" "<<&a<<std::endl;
b>static_cast
用法:static_cast<类型>(表达式)
用途:用于非多态类型转换,标准转换,代替C中通常的转换操作。
示例及结果:
int a=3;
float f=166.7f;
a=static_cast<int>(f);
std::cout<<a<<std::endl;
此时a值为166,不用关心转换后精度的损失
c>dynamic_cast
用法:dynamic_cast<类型>(表达式)
用途:将一个指向派生类的基类指针或引用转换为派生类的指针或引用
示例及结果:
#include <iostream>
class A
{
public:
A(){}
~A(){}
virtual void print()
{
std::cout<<"A::print"<<std::endl;
}
};
class B : public A
{
public:
B(){}
~B(){}
void print()
{
std::cout<<"B print"<<std::endl;
}
void test()
{
std::cout<<"test"<<std::endl;
}
};
int main()
{
//dynamic_cast测试
A *pA;
B *pB,mB;
pA=&mB;
pB=dynamic_cast<B*>(pA);
//pA->test(); //错误语句,test不是A的成员,不可访问
pB->test(); //正确
dynamic_cast<B*>(pA)->test(); //正确,已经转换为派生类指针
return 0;
}
注意事项:
dynamic_cast转换符只能用于指针或者引用,只能用于含有虚函数的类。该操作符在执行类型转换时首先将检查能否成功转换,所以在使用之前应使用if语句对其转换成功与否进行测试。
d>reinterpret_cast操作符
表达式:reinterpret_cast<类型>(表达式)
用途:将一种类型转换为另一种不同的类型