语言中的类型转换

news2024/9/25 1:22:02

编程语言中必然有很多情况需要转换类型。比如引入const的概念就为了提高安全性,编译器提前检查,避免一些意外修改。当然,有时,我们希望手动转换一个变量的类型,让其变成常量,可以利用编译器提供的cast方法。

  • C++早期提供了const_cast,写法繁琐,C++17引入std::as_const写法更轻松,C++20引入bit_cast可实现位级别复制,而非普通float和int转换后丢失小数位的问题。

隐式转换和强制转换

编译器为了简化不同类型变量互操作,引入隐式转换,可以安全转换(不损失数据)数据,此过程由编译器自动完成。当不满足如上条件,需要程序员手动用强制类型转换。

  • C语言大小小于int的整型(包括char和枚举)的类型使用时都自动转换成int. 有人有疑问,这样不是占用空间变大吗?事实上,仅仅是使用时,数据保存依然按对应类型。为什么使用时要转换成int呢?因为CPU操作int最自然,换成char或short一样会使用int大小的寄存器,没好处。下图push eax保存字符c,并传递给printf做参数。

父类子类转换

子类本身就是父类的一种,转换成父类很自然,但父类转换成子类就需要考虑对不对。

  • C++提供dynamic_cast主要为了继承体系转换,比static_cast更智能。虽然C++支持强制转换,必要时也可以通过typeid判断类型是否一致。
  • Java默认也不允许父到子转换,但如果确定父对象引用确实是子对象,可用强制类型转换。
  • C#不提供基类强转成派生类的方法。
  • Python提供了简单的转换方式type(<Derived Class>)(<Base Class>).
  • JS ES6虽然引入了类,一般无必要做父类子类转换。
  • Go/Rust并不是纯粹的OOP语言,需要做一些手脚。

枚举

  • C/C++常规枚举可以和整形做隐式转换,C++11引入作用域为类的枚举,不允许此行为以加强安全性,但可以使用显式转换。


微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是程序员小迷(致力于C、C++、Java、Kotlin、Android、iOS、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

欢迎关注。助您在编程路上越走越好!

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

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

相关文章

保隆科技半年报:净利同比下滑近两成,ADAS/空悬业务仍亏损

2024年上半年&#xff0c;在全球产业链调整、局部战争仍未平息等事件长期影响下&#xff0c;叠加主要经济体货币政策调整、债务风险上升等周期性因素&#xff0c;全球经济复苏面临较大不确定性&#xff0c;汽车市场尚处在缓慢恢复阶段。 这也导致不少汽车零部件上市公司的半年报…

SQL语言的规则和规范

规则 是什么呢&#xff0c;规则就是我们最基本&#xff0c;每时每刻都要遵守的比如人行道靠右&#xff0c;不能逆行&#xff0c; 规范 呢就是锦上添花&#xff0c;如果你不这么做&#xff0c;是不那么道德&#xff0c;不那么好的&#xff0c;就像小学生见到老师要问好&#…

SAP HCM 如何追踪Z表的日志修改记录

导读 INTRODUCTION 日志记录&#xff1a;这几天遇到一个问题&#xff0c;就是查谁修改Z表的数据&#xff0c;因为HCM系统大部分都是信息类型&#xff0c;信息类型修改是有专门一套的处理机制&#xff0c;那么Z开头的表是不是也有追踪的一套机制。今天我们分析下如何开启Z表追…

新生自我介绍ppt怎么做?用这款在线PPT软件一键自动生成!

新学期伊始&#xff0c;初一新生除了适应新的学习环境&#xff0c;还要制作新生自我介绍ppt&#xff0c;让同学们更好地相互了解彼此&#xff0c;自我介绍成为了一项重要的流程。制作一份精美的自我介绍PPT&#xff0c;无疑能够让你在新班级中脱颖而出&#xff0c;给同学们留下…

Mysql之存储引擎概述

文章目录 存储引擎MySQL体系结构存储引擎特点InnoDBMyISAMMemory总结 存储引擎选择 存储引擎 MySQL体系结构 连接层&#xff1a;最上层是一些客户端和链接服务&#xff0c;主要完成一些类似于连接处理、授权认证、及相关的安全方案。服务器也会为安全接入的每个客户端验证它所…

基于python学生信息成绩的管理系统设计与实现,很详细!

需求分析 1.1数据操纵 &#xff08;1&#xff09;录入并保存学生的基本信息及选课信息&#xff08;如学号、姓名、性别、专业、课程名称、课程成绩&#xff09;&#xff1b; &#xff08;2&#xff09;可以对已经保存的学生基本信息及选课信息进行修改&#xff1b; &#x…

字符串(4题)

目录 1.最长公共前缀 2.最长回文串 3.二进制求和 4.字符串相乘 1.最长公共前缀 . - 力扣&#xff08;LeetCode&#xff09; class Solution { public:string longestCommonPrefix(vector<string>& strs) {string ret;int cur 0;while(1){if(strs[0].size() cu…

YOLOv8改进 | 模块缝合 | C2f 融合REPVGGOREPA提升检测性能【详细步骤 完整代码】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a;《YOLOv8改进有效…

记一种常用的实时数据同步方案:Canal+Kafka+Flume

记一种常用的实时数据同步方案&#xff1a;CanalKafkaFlume 在当今数据驱动的业务环境中&#xff0c;数据同步是确保系统间数据一致性的关键环节。一种高效、稳定且可扩展的数据同步方案对于支撑企业的数据处理和分析需求至关重要。本文将介绍一种结合了Canal、Kafka和Flume的…

【unity游戏开发】Blender导出到Unity,带texture

【背景】 上一篇完成了将Mixamo的动画应用到blender的fbx模型中。但是默认配置导出fbx又导入Unity后发现Texture都没了(mesh和rig都在)。如何将Texture也一并导入呢? 【要点】 Blender导出后的FBX展开Mesh的名称不是文件名称,而是同Blender中的Mesh名称。可以根据这一点…

【案例66】支付指令客户端崩溃分析全过程

问题现象 月底&#xff0c;需要给人员开工资&#xff0c;但是财务人员在点击【支付状态指令】节点&#xff0c;点击状态确认后&#xff0c;系统直接崩溃&#xff0c;页面都卡掉。人员已经2天未发工资&#xff0c;情况比较紧急。 更改Uclient模式从分离模式改为嵌入模式&#x…

【linux002】目录操作命令篇 - ls 命令

文章目录 1、基本用法2、常见选项3、举例演示4、注意事项 ls 命令在 Linux 中用于列出目录内容。它有许多选项和参数可以用来调整显示的格式和内容。 1、基本用法 ls [选项] [文件或目录]2、常见选项 -a 或 --all&#xff1a;显示所有文件&#xff0c;包括以点.开头的隐藏文件…

【最新华为OD机试E卷】最左侧冗余覆盖子串(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-E/D卷的三语言AC题解 💻 ACM金牌🏅️团队| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,…

第一个Java程序 - Java学习日记 DAY1

第一个Java程序 在文件夹中&#xff0c;新建一个文本文件 重命名为&#xff1a;helloworld.java 用记事本打开此文件&#xff0c;编写第一行 此时&#xff0c;我们创建了一个公开的类&#xff0c;类名叫helloworld&#xff0c;需要注意类名要和文件名的名字一致 第二行是公开…

MySQL record

更改密码&#xff1a; alter user rootlocalhost identified with mysql_native_password by ‘123456’; 注意&#xff1a; 在命令行方式下&#xff0c;每条MySQL的命令都是以分号结尾的&#xff0c;如果不加分号&#xff0c;MySQL会继续等待用户输入命令&#xff0c;直到MyS…

10.7 URL

万维网 真题

前端面试体——项目介绍以及SPA介绍

谈谈你开发的项目背景与、架构和技术栈 项目背景 假设我们正在开发一个名为“智慧旅游助手”的Web平台。该平台旨在为用户提供一站式的旅游服务&#xff0c;包括目的地推荐、酒店预订、行程规划、在线购票&#xff08;如门票、机票&#xff09;、旅游攻略分享以及基于地理位置…

电脑图片只显示图标不显示图片,但是可以打开看,就是不能预览

电脑图片只显示图标不显示图片&#xff0c;但是可以打开看&#xff0c;就是不能预览 例如&#xff1a;不能显示出图片内容 解决方法&#xff1a;我的电脑&#xff08;计算机&#xff09;-右键-属性-高级系统设置-高级-性能-设置-找到&#xff08;显示缩略图&#xff0c;而不是…

实战赢家:为何传统边缘分割方法比深度学习更有效?附源码+教学+数据

前言 传统的边缘分割方法&#xff0c;如Canny边缘检测和Sobel算子&#xff0c;已经在计算机视觉领域中使用了数十年。这些方法依赖于图像梯度和边缘强度来识别边缘&#xff0c;通过一系列精心设计的滤波器和阈值化步骤来实现高效的边缘检测。虽然这些方法较为简单&#xff0c;…