0
点赞
收藏
分享

微信扫一扫

C++ static_cast类型转换

1. static_cast的基本用法

static_cast主要用于进行比较自然且低风险的转换,类似整形和浮点型,字符型之间的转换。另外如果对象所在的类重载了类型转换
运算符T,则该对象也可以使用static_cast进行到T类型之间的转换,static_cast不能用在不同类型的指针之间的转换,包括整形和指针之间的转换,也不能用于不同类型的引用之间的转换,因为这些转换都是高风险的。
````c++
#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不能做不同类型的指针之间的转换,这种指针之间的转换是极不安全的**
举报

相关推荐

C++类型转换-static_cast

0 条评论