C++标准转换函数
编译时转换:reinterpret_cast、const_cast、static_cast
运行时候转换:dynamic_cast
reinterpret_cast
将重新解释类型,不同类型指针和整型之间的相互转换,没有进行二进制的转换。
const_cast
const常量与普通变量之间的相互转换,
注意:不能对非指针 或 非引用的 变量进行转换
static_cast
主要用于基本类型间的相互转换,和具有继承关系间的类型转换
dynamic_cast
只有类中含有虚函数才能用dynamic_cast,仅能在继承类对象间转换(转指针或引用)
dynamic_cast具有类型检查的功能,比static_cast更安全。
使转换代码更加明显,方便后期调试.
提供C语言强转不支持的某些操作
代码如下:
#include
using namespace std;
void test01()
{
float f1 = 3.456;
int num = (int)f1;
int *p = #
char *q = (char*)p;
cout << num << endl;
cout << *q << endl;
}
void test02()
{
int num = 0x123456;
//int *p = (int*)num;
int *p1 = reinterpret_cast
int *p2 = #
cout << p2 << endl;
long num2 = reinterpret_cast
cout << num2 << endl;
//char *p3 = NULL;
//long num3 = reinterpret_cast
cout << *p1 << endl;
}
void test03()
{
const int a = 34;
int *p = const_cast
int &r_a1 = const_cast
//int &r_a1 = a;
r_a1 = 78;
cout << *p << endl;
cout << r_a1 << endl;
cout << a << endl;
}
class Base
{};
class Son:public Base
{};
void test04()
{
int num = static_cast
cout << num << endl;
Base b1;
Son s1;
b1 = s1;
//s1 = static_cast
Base *p_b = NULL;
Son *p_s = NULL;
//p_s = p_b; //error!
p_s = static_cast
}
int main()
{
test04();
return 0;
}