c++的四种强制类型转换
四种强制类型转换的使用形式: cast-name<type>(expression) //type为目标,expression为源
1.static_cast
1.概念
1)static_cast用于数据类型的强制转换,只要不包含底层const,都可以使用static_cast
2)static_cast主要的使用场景:
static_cast在用较大类型赋值给较小类型时很有用,如把double值赋值给int,这种精度的损失,编译器会给出警告信息,但是如果使用了static_cast,则没有警告
double b = 1.66; int a = static_cast<int>(b); //此时无warning
static_cast对于编译器无法自动执行的类型转换时也很有用
double b = 1.66; void* p = &b; //正确,任何非常量对象的地址都可以存入void* double* pp = p; //错误,编译器无法自动执行这个转换 double* pp = static_cast<double*>(p); //正确,static_cast可以执行这个转换
2.const_cast
1.概念
1)const_cast只能改变对象的底层const
const int a = 2; const int* p = &a; int* pp = const_cast<int*>(p); //改变底层const const char* cp = "hehe"; char* q = static_cast<char*>(cp); //错误,static_cast不能改变底层const string s = static_cast<string>(cp); //正确,将const char*转换成string cout << s << endl; //打印结果:hehe s = "bb"; cout << s << endl;//打印结果:bb const_cast<string>(cp); //错误,const_cast只能改变底层const
2)const_cast常用于函数重载中
3.reinterpret_cast
3.1概念
1)reinterpret_cast用来处理无关类型之间的转换,使用reinterpret_cast强制转换过程仅仅只是比特位的重新解释,因此在使用过程中需要特别谨慎
2)reinterpret_cast主要的使用场景:
- 改变指针或引用的类型
- 将指针或引用转换为一个足够长度的整形
- 将整型转换为指针或引用类型
4.dynamic_cast
posted on 2019-02-26 17:58 JoeChenzzz 阅读(151) 评论(0) 编辑 收藏 举报