构造的方式转换
#include<iostream> using namespace std; int main() { int num = (int)1.11; //C语言的方式转换 int numm = int(1.11); //C++方式的转换 cout << num << endl; cout << numm << endl; system("pause"); return 0; }
static_cast类型转换
类似C语言的强制转换
static<转换的类型>(要转换的目标(可以是常量,也可以是表达式))
按照C++的说法,比起C语言的更加安全
有二种形式的转换
1.基本数据类型的转换
2.空指针转化为目标指针
3.注意:不能够去掉const属性,但是可以增加const属性
//static_cast类型 #include<iostream> using namespace std; int main() { //基本数据类型的强制转换 int num = static_cast<int>(1.11); //空指针类型的转换 double* p = new double(1.11); void* pvoid = static_cast<void*>(p); //不能操作const类型 //可以增加const属性,但是不能够去掉const属性 int number = 11; const int num = static_cast<const int>(number); const int count = 1; int* p1 = (int * )(&count); //C语言强制类型转换 int* p2 = static_cast<int*>(count); //错误使用,不能够去掉const属性 system("pause"); return 0; }
const_cast类型
const_cast 有两个功能
1.去掉const属性(提供一个可以修改的接口,去操作const属性)
2.增加const属性(用的比较少)
/const_cast类型 #include<iostream> using namespace std; int main() { const int date = 1; int* p1 = const_cast<int*>(&date); system("pause"); return 0; }
但是需要注意的是,它只是提供了一个接口
#include<iostream> using namespace std; int main() { const int date = 1; int* p1 = const_cast<int*>(&date); *p1 = 1001; cout << "date = " << date << endl; cout << "p1 = " << *p1 << endl; system("pause"); return 0; }
进行赋值的时候,原来的数据还是原来的数据,不受赋值数据的影响
案例
//案例 #include<iostream> #include<string> using namespace std; class MM { public: MM(const char * name):name(const_cast<char *> (name)){} //C++对const更加严格,这 //里函数形参用了const,初始化列表类型转换下 private: char* name; }; int main() { MM mm("温柔了岁月"); system("pause"); return 0; }
reinterpret_cast类型
1.它可以把指针转换成整数
2.整数转换成指针
3.指针的效果依然存在
这个类型有点鸡肋,认识了解即可
//reinterpret_cast类型 #include<iostream> #include<string> using namespace std; int main() { int* p = reinterpret_cast<int*>(0); // p = nullstr; system("pause"); return 0; }
这就是C++强制转换类型,最后一种用的较少,了解即可。