【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。

在这里插入图片描述

注意:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/105888.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python实验三

1:编程统计英文句子中的单词出现的次数。 要求:输出结果为按照单词在句子中出现的次数降序排列。 提示:用split()拆分字符串 # 1:编程统计英文句子中的单词出现的次数。 # 要求:输出结果为按照…

Dijkstra求最短路(图解)

你好,我是Hasity。 今天分享的内容:Dijkstra求最短路这个题目 Dijkstra求最短路I 题目描述 给定一个 n个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为正值。 请你求出 1 号点到 n号点的最短距离,如果无…

Windows 中环境变量的查看与设置

接触了LLM应用开发后,经常要用到环境变量的设置(openAI apikey啥的) 但是老忘记,今天来学习和总结一下 主要用到以下几种:使用 PowerShell、CMD 和 Python 来查看和设置环境变量 文章目录 1. PowerShell查看环境变量&a…

【Linux】HTTP协议

文章目录 📖 前言1. 认识URL && 引入http协议2. http协议格式2.1 宏观格式:2.2 实验演示: 3. http的方法3.1 GET方法:3.2 POST方法:3.3 GET vs POST: 4. HTTP的报头和状态码5. http的cookie5.1 htt…

估算总体标准差的极差均值估计法sigma = R/d2

总体标准差的估算值可以通过将平均极差除以合适的常数因子d2来计算。这个估算方法是用于估算总体标准差的一种常见方法,尤其在质量控制和过程监控中经常使用。 总体标准差的估算值 (平均极差) / d2 其中: "总体标准差的估算值" 表示用极差…

Floorplanning with Graph Attention

Floorplanning with Graph Attention DAC ’22 目录 Floorplanning with Graph Attention摘要1.简介2.相关工作3.问题公式化4. FLORA的方法4.1 解决方案概述4.2 C-谱聚类算法 4.3 基于GAT的模型4.4 合成训练数据集生成 摘要 布图规划一直是一个关键的物理设计任务&#xff0…

宝塔面板部署express以及MySql项目

第一次在宝塔面板上部署express和MySql项目,部署过程一直跑不通接口,特此记录一下。 在部署的时候,建议第一步把数据库MySql给跑通,中间好多原因是由于数据库的原因给引起的。 一.连接数据库 (1)在宝塔面…

深入promise

深入promise 我们可能知道如何使用 Promise,但是我们知道它们实际上是如何工作的吗? 为了让每个人都了解Promise,让我们从基础开始。如果我们知道 Promise 是什么以及如何使用它,我们可以跳过这一部分并直接跳到“魔法开始”的地…

RSA加密与解密原理

目录 一、什么是RSA加密 二、RSA加密原理 三、RSA加解密过程与算法代码 一、什么是RSA加密 RSA加密是一种非对称加密算法。 对称加密: 对称加密是一种加密方式,加密和解密使用同一个密钥,被加密的信息在传输前用预先协商好的密钥进行加密…

KUKA机器人如何强制输出或取消数字IO信号?

KUKA机器人如何强制输出或取消数字IO信号? 具体的操作方法和步骤可参考以下内容: 如下图所示,点击菜单—显示—输入/输出端,如下图所示,选择想要查看的信号,这里以数字输出端为例进行说明, 如下图所示,此时可以看到输出端信号的编号、名称和当前值,可以通过下拉滚动条…

河北专升本(C语言)

目录 一:C语言的构成特点 二: 数据类型 三: 常量、变量、运算符及表达式 (一)标识符 (二)常量 (三)变量:其值可以改变的量 (四)各种类型数据混合运算 &…

简单好用的解压缩软件:keka 中文 for mac

Keka是一款功能全面、易于使用的文件压缩和解压缩软件,为Mac用户提供了便捷的文件管理工具。它支持多种压缩格式,具有快速解压和强大的压缩功能,让您能够轻松地处理各种文件压缩需求。 隐私非常重要 安全共享只需设置密码并创建高度加密的文…

深度强化学习 第 2 章 蒙特卡洛

2.1随机变量 强化学习中会经常用到两个概念: 随机变量、 观测值。 本书用大写字母表示随机变量,小写字母表示观测值,避免造成混淆。 下面我们定义概率质量函数(probability mass function,缩写 PMF)和概率…

LINUX定时解压缩方案

需求背景 对接客户中某个上游为外包系统,外包系统每日推送压缩文件至指定文件夹下,文件格式为YYYYMMDD_RegReport.zip。由于每日采集文件,无法对接压缩包内文件,需要将推送的压缩文件每日解压为文件夹 需求分析 与客户沟通后&a…

HarmonyOS 远端状态订阅开发实例

IPC/RPC 提供对远端 Stub 对象状态的订阅机制, 在远端 Stub 对象消亡时,可触发消亡通知告诉本地 Proxy 对象。这种状态通知订阅需要调用特定接口完成,当不再需要订阅时也需要调用特定接口取消。使用这种订阅机制的用户,需要实现消…

C++初阶(1)

W...Y的主页😊 代码仓库分享💕 ​ 🍔前言: 今天我们正式进入C篇章,作为学过C语言的同志,继续学习C肯定就不会进行那些与C语言相同的学习,因为C语言的内容在C中也可以正常使用,所…

通过示例详细了解ES6导入导出模块

通过示例详细了解ES6导入导出模块 似乎许多开发人员认为 ES6 模块只不过是export、import关键字。事实上,它更加多样化。它拥有强大的功能和鲜为人知的问题。在本文中,我们将使用一些示例来了解这些内容。 示例一 // index.mjs import { default } fr…

flask vue跨域问题

问题: 调试时候跨域访问报: Request header field authorization is not allowed by Access-Control-Allow-Headers in preflight response. 解决办法: 安装flask_cros from flask_cors import CORS CORS(app) app.after_request def a…

如何避免大语言模型绕过知识库乱答的情况?LlamaIndex 原理与应用简介

本文首发于博客 LLM 应用开发实践 随着 LangChain LLM 方案快速普及,知识问答类应用的开发变得容易,但是面对回答准确度要求较高的场景,则暴露出一些局限性,比如向量查询方式得到的内容不匹配,LLM 对意图识别不准。所…

【Linux】多线程

文章目录 一.Linux线程概念1.什么是线程2.二级页表3.线程的优点4.线程的缺点5.线程异常6.线程用途 二.Linux进程VS线程1.进程和线程2.进程的多个线程共享3.进程和线程的关系 三.Linux线程控制1.POSIX线程库2.线程创建3.线程等待4.线程终止5.分离线程6.线程ID及进程地址空间布局…