四种强制类型转换的使用形式: cast-name<type>(expression) //type为目标,expression为源
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可以执行这个转换
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.1概念
1)reinterpret_cast为对象的bit模式提供较低层次的重新解释
原文:https://www.cnblogs.com/Joezzz/p/10439040.html