C++强制类型转换操作符 static_cast
来源:互联网 发布:数据库索引设计与优化 编辑:程序博客网 时间:2024/06/05 03:20
static_cast是一个强制类型转换操作符。强制类型转换,也称为显式转换,C++中强制类型转换操作符有static_cast、dynamic_cast、const_cast、reinterpert_cast四个。本节介绍static_cast操作符。
- 编译器隐式执行的任何类型转换都可以由static_cast来完成,比如int与float、double与char、enum与int之间的转换等。
double a = 1.999;int b = static_cast<double>(a); //相当于a = b ;
当编译器隐式执行类型转换时,大多数的编译器都会给出一个警告:
e:\vs 2010 projects\static_cast\static_cast\static_cast.cpp(11): warning C4244: “初始化”: 从“double”转换到“int”,可能丢失数据
使用static_cast可以明确告诉编译器,这种损失精度的转换是在知情的情况下进行的,也可以让阅读程序的其他程序员明确你转换的目的而不是由于疏忽。
把精度大的类型转换为精度小的类型,static_cast使用位截断进行处理。
- 使用static_cast可以找回存放在void*指针中的值。
double a = 1.999; void * vptr = & a; double * dptr = static_cast<double*>(vptr); cout<<*dptr<<endl;//输出1.999
static_cast也可以用在于基类与派生类指针或引用类型之间的转换。然而它不做运行时的检查,不如dynamic_cast安全。static_cast仅仅是依靠类型转换语句中提供的信息来进行转换,而dynamic_cast则会遍历整个类继承体系进行类型检查,因此dynamic_cast在执行效率上比static_cast要差一些。现在我们有父类与其派生类如下:
class ANIMAL{public: ANIMAL():_type("ANIMAL"){}; virtual void OutPutname(){cout<<"ANIMAL";};private: string _type ;};class DOG:public ANIMAL{public: DOG():_name("大黄"),_type("DOG"){}; void OutPutname(){cout<<_name;}; void OutPuttype(){cout<<_type;};private: string _name ; string _type ;};
此时我们进行派生类与基类类型指针的转换:注意从下向上的转换是安全的,从上向下的转换不一定安全。
int main(){ //基类指针转为派生类指针,且该基类指针指向基类对象。 ANIMAL * ani1 = new ANIMAL ; DOG * dog1 = static_cast<DOG*>(ani1); //dog1->OutPuttype();//错误,在ANIMAL类型指针不能调用方法OutPutType();在运行时出现错误。 //基类指针转为派生类指针,且该基类指针指向派生类对象 ANIMAL * ani3 = new DOG; DOG* dog3 = static_cast<DOG*>(ani3); dog3->OutPutname(); //正确 //子类指针转为派生类指针 DOG *dog2= new DOG; ANIMAL *ani2 = static_cast<DOG*>(dog2); ani2->OutPutname(); //正确,结果输出为大黄 // system("pause");}
- static_cast可以把任何类型的表达式转换成void类型。
- static_cast把任何类型的表达式转换成void类型。
- 另外,与const_cast相比,static_cast不能把换掉变量的const属性,也包括volitale或者__unaligned属性。
0 0
- C++强制类型转换操作符 static_cast
- C++强制类型转换操作符 static_cast
- static_cast与c风格的强制类型转换
- 【C++】强制类型转换(static_cast,reinterpret_cast,const_cast,dynamic_cast,explicit)
- static_cast,reinterpret_cast及C的强制类型转换
- static_cast与c风格的强制类型转换比较
- [C++] 强制类型转换static_cast、dynamic_cast、reinterpret_cast和const_cast
- c++dynamic_cast、const_cast 、static_cast、reinterpret_cast强制类型转换
- c++ 强制转换类型运算符 const_cast reinterpret_cast static_cast dynamic_cast
- C++里的强制类型转换符 reinterpret_cast static_cast
- C++强制类型转换符-dynamic_cast:static_cast:const_cast:reinterpret_cast
- 强制类型转换运算符 static_cast<>() 定点格式输出fixed
- 强制类型转换操作符
- c++强制类型转换:dynamic_cast、const_cast 、static_cast
- C++ 强制类型转换 static_cast<new_type>(expression)
- C++强制类型转换之static_cast
- C++ 之强制类型转换 static_cast
- static_cast与强制类型转换的区别
- Java WebSocket编程——一个简单的例子(编程式)
- C++ 隐式类类型转换
- static关键字总结
- C++ 复制控制之复制构造函数
- unity AR开发中遇到的一些错误总结
- C++强制类型转换操作符 static_cast
- C++强制类型转换操作符 const_cast
- struts,Hibernate,Spring三大框架整合错误分析
- Unity3D总结:关于射线碰撞
- C++强制类型转换操作符 dynamic_cast
- 11210 - Chinese Mahjong
- Android APP内存优化之图片优化
- 二叉查找树 C++实现(含完整代码)
- 生成txt文件