本篇文章给大家介绍C++中的几种新式类型转换。
一、static_caststatic_cast用法:
1.用于基本类型间的转换
int a = 67;
char b = static_cast(a);//true
cout<< a<< endl;
cout<< b<< endl;
2.不能用于基本类型指针间的转换
int a = 67;
char b = static_cast(a);//true
cout<< a<< endl;
cout<< b<< endl;
int* p = &a;
char* p1 = static_cast(p);//err
3.用于有继承关系对象之间的转换和类指针之间的转换
#include#includeusing namespace std;
class Test
{public:
Test()
{cout<< "Test()"<< endl;
}
~Test()
{cout<< "~Test()"<< endl;
}
void print()
{cout<< "this is Test()"<< endl;
}
};
class Test1 :public Test
{public:
Test1()
{cout<< "Test1()"<< endl;
}
~Test1()
{cout<< "~Test1()"<< endl;
}
void printf_string()
{cout<< "string"<< endl;
}
};
int main()
{Test1 t1;
Test t2 = static_cast(t1);
return 0;
}
二、const_castconst_cast可以清除变量的只读熟悉。
注意:强制转换的目标类型必须是指针或者引用。
此时a不能赋值为其他的数值,因为a是一个只读变量
const int& a = 10;
a = 20;//err
使用const_cast清除a的只读属性
const_cast(a) = 20;//true
三、reinterpret_cast用于指针类型间的强制类型转换
char a = 10;
char* p = &a;
int* p1 = reinterpret_cast(p);
用于整数和指针的强制类型转换
int a = 0x220000;
int* p = reinterpret_cast(a);
四、dynamic_cast用于有继承关系的类指针间的转换
需要有虚函数的支持
class Test
{public:
Test()
{cout<< "Test()"<< endl;
}
virtual void print()
{cout<< "hello"<< endl;
}
~Test()
{cout<< "~Test()"<< endl;
}
};
class Test1 : public Test
{public:
Test1()
{cout<< "Test1()"<< endl;
}
void print()
{cout<< "hello world"<< endl;
}
~Test1()
{cout<< "~Test1()"<< endl;
}
};
Test1 t2;
Test1 *t = &t2;
Test *t1 = dynamic_cast(t);
总结这四个强制类型转换是经常使用的,希望大家掌握。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧