C++显式类型转换---static_cast
来源:互联网 发布:华为交换机禁止mac 编辑:程序博客网 时间:2024/05/17 05:51
显式类型转换
1.static_cast < type-id > ( expression )
说明:该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。
来源:为什么需要static_cast强制转换?
情况1:void指针->其他类型指针(隐式转换会报错)
情况2:改变通常的标准转换
情况3:避免出现可能多种转换的歧义
任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast.当需要把一个较大的算术类型赋值给较小的类型时,static_cast非常有用,此时,强制类型转换告诉程序的读者和编译器:我们知道并且不在乎潜在的精度损失。
一般来说,如果编译器发现一个较大的算术类型视图赋值给较小的类型(double->int),就会给出警告信息,但是当我们执行了显式的类型转换后,警告信息就会被关闭了。
当把指针存放在void*中,并且使用static_cast将其强制转换回原来的类型时,应该确保指针的值保持不变。
它主要有如下几种用法:
(1)用于类层次结构中基类和子类之间指针或引用的转换。进行上行转换(把子类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成子类指针或引用)时,由于没有动态类型检查,所以是不安全的。
(2)用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发人员来保证。
(3)把void指针转换成目标类型的指针(不安全!!)
(4)把任何类型的表达式转换成void类型。
注意:static_cast不能转换掉expression的const、volitale、或者__unaligned属性。
代码示例:
#include<iostream>using namespace std;int main(){char a='a';cout<<a<<":"<<static_cast<int>(a)<<endl;int i=2,j=3;double k=static_cast<double>(j)/static_cast<double>(i);cout<<k<<endl;double d=3.14;void *p=&d;//任何非常量对象的地址都能存入void*double *dp=static_cast<double*>(p);//正确,将*void转换回初始的指针类型,必须保证转回的类型与原类型相同cout<<*dp<<endl;system("pause");return 0;}
运行结果:
#include<iostream>using namespace std;class A{};class B:public A{};class C:public A{};class D{};int main(){A objA;B objB;A* pObjA = new A();B* pObjB = new B();C* pObjC = new C();D* pObjD = new D();objA=static_cast<A&>(objB); //转换为基类引用 子类对象->基类对象(安全)objA=static_cast<A>(objB);//objB=static_cast<B>(objA); //error 不能进行转换 基类对象->子类对象(不存在)pObjA = pObjB; //right 基类指针指向子类对象//pObjB = pObjA; //error 子类指针指向基类对象pObjA = static_cast<A*>(pObjB); //right 基类指针指向子类pObjB = static_cast<B*>(pObjA); //强制转换 OK 基类到子类//pObjC = static_cast<C*>(pObjB); //error 继承于统一类的派生指针之间转换 //pObjD = static_cast<D*>(pObjC); //error 两个无关联之间转换system("pause");return 0;}
- C++static_cast类型转换函数
- C++显式类型转换---static_cast
- c++ 类型转换(c cast static_cast dynamic_cast)
- C++ reinterpret_cast,const_cast,static_cast,dynamic_cast 显式类型转换(转)
- c++笔记 显式类型转换static_cast、dynamic_cast、const_cast、reinterpret_cast
- reinterpret_cast,const_cast,static_cast,dynamic_cast 显式类型转换
- reinterpret_cast,const_cast,static_cast,dynamic_cast 显式类型转换
- reinterpret_cast,const_cast,static_cast,dynamic_cast 显式类型转换
- c++ 显式类型转换static_cast, dynamic_cast, const_cast
- static_cast类型转换
- static_cast转换类型输出
- C++类型转换----static_cast
- 类型转换:static_cast
- C/C++: C++ 中 static_cast 类型转换的含义
- static_cast与c风格的强制类型转换
- C++:类型转换——static_cast和const_cast
- 浅析c++中的类型转换--static_cast
- 【C++】强制类型转换(static_cast,reinterpret_cast,const_cast,dynamic_cast,explicit)
- 内核模块笔记
- win7下安装红帽linux
- 【LeetCode】Anagrams
- Android中Gson解析详解json
- 自定义UITableViewCell详细步骤+++++++++++++++
- C++显式类型转换---static_cast
- sysgen学习之cordic算法的理解
- 自定义提示框
- 十七、oracle 权限
- 自动白平衡(AWB)算法---1,色温曲线
- “数据结构”学习总计划及其策略
- C盘太满,程序不能运行的原因
- FZU2108:Mod problem(数学)
- 代码1