博客
关于我
新型类型转换
阅读量:372 次
发布时间:2019-03-05

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

C++ 类型转换指南:静态_cast、const_cast、reinterpret_cast 和 dynamic_cast

C++ 提供了多种强制类型转换的方式,用于在不同类型之间进行转换。这些转换方式在日常编程中非常有用,特别是在处理指针、内存以及继承关系时。以下是几种常见的类型转换方式及其使用场景。


1. static_cast(静态_cast)

static_cast 是最常用的强制类型转换方式,适用于基本类型和类之间的转换。但需要注意的是,它不能用于指针类型之间的转换。

例子:

int i = 0x12345;char c = 'c';int* pi = &i;char* pc = &c;// 正确使用c = static_cast
(i);pc = static_cast
(pi);// 错误使用// pc = static_cast
(&i); // 错误,源类型不是指针

特点:

  • 适用于基本类型和类对象之间的转换。
  • 不能用于指针类型间的转换。

2. const_cast(const_cast)

const_cast 用于去除变量的只读属性(const)。转换后的目标类型必须是指针或引用。

例子:

const int& j = 1;int& k = const_cast
(j);const int x = 2;int& y = const_cast
(x);int z = const_cast
(x); // 错误,目标类型不是指针或引用

特点:

  • 用于去除只读属性。
  • 强制转换的目标类型必须是指针或引用。

3. reinterpret_cast(reinterpret_cast)

reinterpret_cast 用于指针类型之间的强制类型转换,包括整数和指针的转换。

例子:

int i = 0;char c = 'c';int* pi = &i;char* pc = &c;// 正确使用pc = reinterpret_cast
(pi);pi = reinterpret_cast
(pc);// 错误使用pi = reinterpret_cast
(i); // 错误,源类型不是指针

特点:

  • 适用于指针类型间的转换。
  • 也可以用于整数和指针之间的转换。

4. dynamic_cast(动态_cast)

dynamic_cast 主要用于有继承关系的类指针之间的转换,且具有类型检查功能。它需要虚函数的支持。

例子:

int i = 0;int* pi = &i;// 错误使用char* pc = dynamic_cast
(pi); // 错误,pi指向的不是字符类型

特点:

  • 适用于有继承关系的类指针转换。
  • 具有类型检查功能。
  • 需要虚函数的支持。

总结

C++ 提供了多种强制类型转换方式,每种方式都有其特定的使用场景和限制。选择正确的转换方式对于代码的正确性至关重要。通过合理使用这些转换方式,可以有效避免段错误并提高代码的可维护性。

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

你可能感兴趣的文章
python3.2批量查询IP地址区域
查看>>
Python3.5中协程和未来/任务之间的区别?
查看>>
python3.5实现socket通讯(TCP)
查看>>
python3.6 ubuntu部署nginx、 uwsgi、 django
查看>>
Python3.6.3中,functools似乎不能用
查看>>
python3.6.5+cuda9+cudnn7.1+win10+tensorflow-gpu1.9.0下载配置
查看>>
python3.6使用pickle序列化class
查看>>
python3.6入门到高阶(全栈) day027 网络通信协议 osi七层模型
查看>>
python3.6版本中的python-weka-wrapper安装失败,错误代码为%1
查看>>
Python3.7安装cv2踩过的坑
查看>>
python写txt文件
查看>>
python关于sorted排序函数详细解析 附实战代码(全)
查看>>
python3.8调用m文件,调用matlab
查看>>
python3.9新特性_Python 3.9 新特性速览
查看>>
Python3.x:遍历select下拉框获取value值
查看>>
python360百科_11月编程排行榜:Python超过Java成第二
查看>>
Python关于Paginator分页函数详细解析 附实战代码
查看>>
python3、ipython3、setup-tools、pip等环境搭建详细总结
查看>>
python3下使用cv2.imwrite存储带有中文路径图片或者绝对路径图片
查看>>
python3与django中@property详解
查看>>