四种显示转换的用法
来源:互联网 发布:12315怎么投诉淘宝卖家 编辑:程序博客网 时间:2024/05/17 03:27
1.reinterpret_cast
/************************************************************************//* 4种显示转换的使用方法,含义,使用注意事项: *//************************************************************************/#include<iostream>using namespace std;int main(){/*1.reinterpret_cast将一个类型的指针,转换为另一个类型的指针。这种转换不用修改指针变量值数据存放格式(不改变指针变量值)只需要在编译时重新解指针的类型就可做到;*/double d = 9.3;double *pd = &d;int sized = sizeof(double);int sizei = sizeof(int);cout<<sized<<endl;cout<<sizei<<endl;int *pi = reinterpret_cast<int *>(pd);cout<<"value before changed:"<<pd<<endl;//L1cout<<"value = "<<d<<endl;cout<<"value after changed:"<<pi<<endl;//L2 cout<<"value = "<<*pi<<endl;return 0;}
从中L1/L2中可以看到指针变量的值并没有改变。
不能将reinterpret_cast 用于以下几种情况:
1)非指针类型的转换
2)contst指针 转换为void* 指针
2.const_cast
/*2.const_cast 用于除去指针变量的常量属性,将它转换为一个对应指针类型的普通变量。*/int value1 = 0;const int *pci = 0;int *pj = const_cast<int *>(pci);//L1相当于int *pj = (int *)pci;pj = &value1;pci = &value1;*pj = 10;//*pci = 20; //报错error C2166: l-value specifies const object
其中不能够将L1语句替换为:
int *pj = pci;
其中可以将非const指针变量转换为 const 指针变量:
int *i = 0;int const *_i = const_cast<const int *>(i);
因为cont int *不能够转换为int *。
不能够将const_cast用于以下情况:
1)无法将非指针的常变量转换为普通变量。
3.static_cast
/*3.static_cast 主要用于基本类型之间和具有继承关系的类型之间的转换,这种转换一般会更改变量的内部表示方式,因此static_cast应用于指针类型转换,没有太大意义,即使允许指针类型转换,也不及reinterpret_cast解释效率高。*///1)基本类型转换int i = 0;double d = static_cast<double>(i);int j = static_cast<int>(d);//2)转换继承类型的对象为基类对象。class Base{};class Derived:public Base{};Derived d1;Base b1 = static_cast<Base>(d1);
4.dynamic_cast
/*4.与静态static_const 相对,是动态dynamic_cast转换。这种转换是在运行时,进行转换的,并非在编译时进行,明显区别于上面3个类型转换操作。其只能在继承对象的指针之间或引用进行类型转换。*///继承,指针class Base{};class Derived:public Base{};Derived *pd = new Derived;Base *pb = dynamic_cast<Base *>(pd);if (!pb){cout<<"change success"<<endl;}else{cout<<"change failed"<<endl;}//继承,引用 Derived d;Base &b = dynamic_cast<Base &>(d);//没有继承关系,但是被转换的类有虚函数class A{virtual ~A(){}};class B{};A* pa1 = new A;B* pb1 = dynamic_cast<B*>(pa1);if (!pb){cout<<"dynamic_cast success"<<endl;}else{cout<<"dynamic_cast failed"<<endl;}
- 四种显示转换的用法
- C++的四种显示类型转换
- C++四种显示转换
- CSS的四种用法
- typedef的四种用法
- Dialog的四种用法
- synchronized 的四种用法
- Typedef的四种用法
- Typedef的四种用法
- QMessageBox 的四种用法
- synchronized的四种用法
- 四种DC的用法
- 指针的四种用法
- this的四种用法
- [C++][操作符]四种显示转换操作符
- C++的四种强制类型转换
- 四种强制类型转换的总结
- 四种强制类型转换的总结
- java线程池
- 在驱动模块初始化函数中实现设备节点的自动创建
- C++实现单例模式
- 【面试题】连续重复字符串去重
- PV操作和信号量机制实现进程同步(对多个临界资源的互斥访问)
- 四种显示转换的用法
- CSS样式表属性
- Oracle10g中的compatible参数
- Symbian按键处理函数:OfferKeyEventL()详解
- ATL Internals 2ed复习.chapter 3.CComSafeArray
- 黑马程序员 Object类,包和匿名内部类
- Bridge模式
- peewee 一个轻量级的ORM (三)
- oracle分页存储过程