IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++学习 十九、类型转换符 -> 正文阅读

[C++知识库]C++学习 十九、类型转换符

C++学习 十九、类型转换符

前言

本篇学习C++中的四个类型转换符号,static_cast,dynamic_cast,const_cast,reinterpret_cast。

C++使用以上这四种转换代替C风格的强制类型转换。

static_cast

static_cast用于低风险的转换,例如:

  • 自动类型转换,如int转double
  • 向上转换,如派生类指针转基类指针
  • 向下转换,如基类指针转派生类指针(但不安全)
  • 定义了转换构造函数和转换函数的类与类型转换
  • void指针与其它指针转换

使用方法是static_cast<Type> (expression)

    Base* pb;
    Derived* pd;
    pd = static_cast<Derived*>(pb);

而不同内置类型指针转换、整型转指针等高风险转换不能使用static_cast。

static_cast在编译时进行检查,转换失败时报错。

dynamic_cast

dynamic_cast用于继承类之间的转换:

  • 向上转换
  • 向下转换

dynamic_cast由于向上转换是安全的,不会在运行期间检查。而向下转型不安全,因此将在运行期间检查安全性:

    Base* pb;
    Derived* pd;
    pd = dynamic_cast<Derived*>(pb);

对于向上转换,dynamic_caststatic_cast是类似的,对于向下转换,dynamic_cast更安全。

dynamic_cast是运行效率较低的转换。

注意:向下转换要求基类必须有虚函数。

const_cast

const_cast用于去除表达式的const/volatile:

    const int a = 6;
    int* pa = const_cast<int*>(&a);
    *pa = 5;
    std::cout << *pa << std::endl; // 5
    std::cout << a << std:: endl; // 6

&a的类型为const int*,必须使用const_cast<int*>显式转换为int*,不能隐式转换。

reinterpret_cast

reinterpret_cast用于高风险的转换,是static_cast的补充,适用于不同内置类型的指针转换,整型转指针。这些转换在static_cast中是非法的:

    int a = 6;
    double* pa = reinterpret_cast<double*>(&a); // static_cast is invalid
    *pa = 5;
    std::cout << *pa;

reinterpret_cast不能去除表达式的const

由于转换风险大,因此尽量减少使用reinterpret_cast

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-13 21:33:09  更:2022-03-13 21:33:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:45:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码