码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【C++进阶】:C++类型转换


    C++类型转换

    • 一.C语言里的类型转换
    • 二.C语音类型转换的一些弊端
    • 三.C++的四种类型转换
      • 1.static_cast
      • 2.reinterpret_cast
      • 3.const_cast
      • 4.dynamic_cast

    一.C语言里的类型转换

    在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与接收返回值类型不一致时,就需要发生类型转化,C语言中总共有两种形式的类型转换:隐式类型转换和显式类型转换。

    1. 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译失败
    2. 显式类型转化:需要用户自己处理。

    在这里插入图片描述

    二.C语音类型转换的一些弊端

    常见的有符号转换成无符号

    在这里插入图片描述
    在这里插入图片描述

    const对象可以被间接修改,但其打印结果不变

    在这里插入图片描述

    在这里插入图片描述

    通过调试窗口观察。

    在这里插入图片描述

    我们发现调试窗口里的n的值又发生了改变,这是为什么呢?这其实是编译器进行了优化:编译器认为const修饰的变量不能被修改,所以编译器直接将n放入了寄存器里,所以当我们对内存里的n进行修改时,编译器并不会去内存里取n,而是直接在寄存器里取。

    对此我们要防止编译器优化,加上volentile即可。

    在这里插入图片描述

    在这里插入图片描述

    三.C++的四种类型转换

    1.static_cast

    static_cast用于非多态类型的转换(静态转换),编译器隐式执行的任何类型转换都可用static_cast,但它不能用于两个不相关的类型进行转换。

    在这里插入图片描述

    2.reinterpret_cast

    reinterpret_cast操作符通常为操作数的位模式提供较低层次的重新解释,用于将一种类型转换为另一种不同的类型。

    在这里插入图片描述

    3.const_cast

    const_cast最常用的用途就是删除变量的const属性,方便赋值。

    在这里插入图片描述

    4.dynamic_cast

    dynamic_cast用于将一个父类对象的指针/引用转换为子类对象的指针或引用(动态转换)
    向上转型:子类对象指针/引用->父类指针/引用(不需要转换,赋值兼容规则)
    向下转型:父类对象指针/引用->子类指针/引用(用dynamic_cast转型是安全的)
    注意:

    1. dynamic_cast只能用于父类含有虚函数的类。
    2. dynamic_cast会先检查是否能转换成功,能成功则转换,不能则返回0。

    在这里插入图片描述

    注意:

    强制类型转换关闭或挂起了正常的类型检查,每次使用强制类型转换前,程序员应该仔细考虑是
    否还有其他不同的方法达到同一目的,如果非强制类型转换不可,则应限制强制转换值的作用
    域,以减少发生错误的机会。强烈建议:避免使用强制类型转换。

  • 相关阅读:
    Armv8-R系列之何为MPU?
    7-8 循环日程安排问题
    C语言之错误处理
    Zookeeper临时节点删除时机解析
    WEB自动化_强制等待与智能等待(显示等待、隐式等待)
    软件工程中如何设计测试用例
    orangepi香橙派 ubuntu安装RabbitMQ
    自己动手搭建一个传奇是什么体验?下面是我搭建的详细教程,大家跟着教程做,不光是学会了技术,平时还可以帮朋友搭建
    Java --- 创建SpringMVC项目
    2023年华为杯研究生数学建模竞赛辅导
  • 原文地址:https://blog.csdn.net/m0_73790767/article/details/133838316
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号