构造的方式转换
#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++强制转换类型,最后一种用的较少,了解即可。