1. static_cast的基本用法
static_cast主要用于进行比较自然且低风险的转换,类似整形和浮点型,字符型之间的转换。另外如果对象所在的类重载了类型转换 运算符T,则该对象也可以使用static_cast进行到T类型之间的转换,static_cast不能用在不同类型的指针之间的转换,包括整形和指针之间的转换,也不能用于不同类型的引用之间的转换,因为这些转换都是高风险的。
#include <iostream>
int main()
{
int iValue = 65; // 'A'
char cValue,cValueError;
double dValue;
//将int转为char类型,有风险
cValue = static_cast<char>(iValue);
std::cout<<"cValue Value is "<<cValue<<std::endl;
//ASCII前32个字符都是不可见的,是不能正确打印的
iValue = 30;
cValueError = static_cast<char>(iValue);
std::cout<<"cValueError Value is "<<cValueError<<std::endl;
//int转double完全没问题
dValue = static_cast<double>(iValue);
std::cout<<"dValue value is "<<dValue<<std::endl;
dValue = 3.14f;
//double转int会丢失精度
iValue = static_cast<int>(dValue);
std::cout<<"iValue values is "<<iValue<<std::endl;
/******************************指针篇*************************************/
int testInt = 100;
int *pInt = &testInt;
char *pChar = nullptr;
double *pDouble = nullptr;
//static_cast不能用于不同类型指针和引用之间的转换,这种转换是高风险的
//char占用一个字节,int占用四个字节(32位系统),int类型指针转为char*类型的指针,会丢掉三个字节的内存
//pChar = static_cast<char*>(pInt);
//double占用8字节, 而int占用四个字节,会多余四个未知字节,不可使用
//pDouble = static_cast<double>(pInt);
std::cout<<sizeof(double)<<std::endl;
return 0;
}
- [*]static_cast不能做不同类型的指针之间的转换,这种指针之间的转换是极不安全的