博客
关于我
C++类型转换总结
阅读量:431 次
发布时间:2019-03-06

本文共 1435 字,大约阅读时间需要 4 分钟。

C++风格的类型转换提供了四种类型转换操作符,分别适用于不同的场景。以下是对每种转换的详细分析:

1. const_cast

const_cast 用于去掉类型的 const 或 volatile 属性。例如:

struct SA {    int i;};const SA ra;// ra.i = 10; 直接修改 const 类型,编译错误SA & rb = const_cast
(ra);rb.i = 10; // 可以正常修改

2. static_cast

static_cast 类似于 C 风格的强制转换,无条件转换,适用于基本类型和类之间的转换。例如:

int n = 6;double d = static_cast
(n); // 基本类型转换int* pn = &n;double* d = static_cast
(pn); // 无关类型指针转换,编译错误void* p = static_cast
(pn); // 任意类型转换成 void 类型

3. dynamic_cast

dynamic_cast 用于动态类型转换,需要运行时类型信息,通常用于多态类。例如:

class BaseClass {    public:    int m_iNum;    virtual void foo(){}; // 基类必须有虚函数};class DerivedClass: public BaseClass {    public:    char* m_szName[100];    void bar(){};};BaseClass* pb = new DerivedClass();DerivedClass* pd1 = static_cast
(pb); // 子类 → 父类,静态类型转换,正确但不推荐DerivedClass* pd2 = dynamic_cast
(pb); // 子类 → 父类,动态类型转换,安全BaseClass* pb2 = new BaseClass();DerivedClass* pd21 = static_cast
(pb2); // 父类 → 子类,静态类型转换,危险DerivedClass* pd22 = dynamic_cast
(pb2); // 父类 → 子类,动态类型转换,安全

4. reinterpret_cast

reinterpret_cast 仅重新解释类型,不执行二进制转换,通常用于指针和算术类型。例如:

int doSomething(){return 0;};typedef void (*FuncPtr)();FuncPtr funcPtrArray[10];funcPtrArray[0] = reinterpret_cast
(doSomething); // 不同函数指针类型之间进行转换

总结

  • 使用 const_cast 去掉 const 或 volatile 属性。
  • 对基本类型转换使用 static_cast。
  • 对多态类转换使用 dynamic_cast。
  • 对不同指针类型转换使用 reinterpret_cast。

转载地址:http://mlpuz.baihongyu.com/

你可能感兴趣的文章
python3判断字典、列表、元组为空以及字典是否存在某个key的方法
查看>>
Python3利用pymysql操作 MySQL
查看>>
python3处理json文件中含有中文dumps的应用
查看>>
Python3子进程输出
查看>>
Python3学习笔记3,变量、运算符
查看>>
Python3学习笔记(urllib模块的使用)
查看>>
python3安装scapy_Linux下安装scapy-python3
查看>>
python3实现socket通信
查看>>
Python关于numpy.transpose函数详细解析附代码
查看>>
Python3导入自定义模块的3种方式
查看>>
python3打开txt文件_使用Python 3从文本文件读取句子并添加到列表中
查看>>
python3爬虫抓取智联招聘职位信息代码
查看>>
Python3爬虫数据入数据库---把爬取到的数据存到数据库,带数据库去重功能
查看>>
python3的 pymysql把mysqldb库取代了,让python 3支持mysqldb的解决方法
查看>>
Python3笔记——IDE的选择
查看>>
python3简单使用requests 用户代理,cookie池
查看>>
Python3组播通信编程实现教程(发送者+接收者)
查看>>
Python3编写网络爬虫10-数据存储方式三-CSV文件存储
查看>>
python3读取redis返回数据带有'b'的问题
查看>>
Python3连接MySQL
查看>>