当前位置: 首页 > news >正文

网站广告图怎么做/windows7优化大师

网站广告图怎么做,windows7优化大师,新网站如何被网站收录,合肥seo网站推广费用C语言中的类型转换 在C语言中,当赋值符号两边的类型不匹配的时候,或者是形参类型和实参类型不匹配时,返回值类型与接受返回值类型不匹配时,都会需要类型转换。C语言的类型转换有两种:显示类型转换和隐式类型转换。 显…

C语言中的类型转换

在C语言中,当赋值符号两边的类型不匹配的时候,或者是形参类型和实参类型不匹配时,返回值类型与接受返回值类型不匹配时,都会需要类型转换。C语言的类型转换有两种:显示类型转换隐式类型转换

显示类型转换通常是由程序员自己指定转换的类型。而隐式类型转换是编译器在编译期间进行推导,如果符合转换条件就自动转换,否则就报错处理。通常内置类型的浮点数类型或者整型类型的变量支持隐式类型的转换。
在这里插入图片描述
隐式类型转换的代码的可读性较差,并且如果类型转换都是通过这一种形式来写,定位转换错误的成本较高。隐式类型转换可能会导致数据丢失或产生未定义行为,从而影响程序的安全性和正确性。特别是在进行数据截断或符号位改变的转换时,可能会得到意想不到的结果。

下面通过一个经典的隐式类型导致程序错误的样例,带大家看看隐式类型转换的坑。
在这里插入图片描述
end是一个整型变量,但是它和无符号整型变量pos比较时,会隐式类型转换成无符号整型。所以导致了程序死循环问题,因为无符号整型不可能为负数。这类场景在我刚学线性表的时候坑了我。解决方法也很简单,可以控制一下end的位置,并修改一下判断条件为 > 即可。当然,使用强制类型转化将比较逻辑的pos转化成int也可以。

下面再来看看一个比较特别的场景
在这里插入图片描述
通过代码可以看到,n指向的空间已经被我们修改了。为什么打印n还是10呢?因为编译器对于const修饰的变量进行了一个特殊的优化。不同编译器的优化可能不同,有的编译器把n存到寄存器中。而有的编译器会进行写成宏,在编译时进行宏替换。所以,n就还是10。而n的地址上的值已经被改成11了。
在这里插入图片描述

为了避免编译器对具有常属性的变量所做的特殊处理,可以是用volatile关键字要求编译器每一次都去内存中获取值。
在这里插入图片描述

C++的强制类型转换

单参数的构造支持隐式类型的转换。使用explicit关键字修饰构造函数可以禁止隐式类型转换。
在这里插入图片描述

标准C++为了加强类型转换的可视性,引入了四种命名的强制类型转换操作符:static_cast、reinterpret_cast、const_cast以及dynamic_cast。描述代码类型转换后,可以大幅度提高代码的可读性,以及对一些类型错误处理更加方便。

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

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

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

在这里插入图片描述

dynamic_cast用于将一个父类的指针或引用赋值给子类对象的指针或引用时进行安全的动态转换。首先我们需要知道,子类的的指针或引用赋值给复类对象的指针或引用成为向上赋值。这个是编译器支持的,这个行为称之为切片或者切割。但是,父类的指针或引用赋值给子类对象的指针或引用是一个向下赋值。这样的行为是很危险的。
在这里插入图片描述

虽然,向下赋值编译器不会报错。但是由于A的值赋值给B*,但是A里面没有第二个成员。这是越界访问,会导致程序崩溃。

在这里插入图片描述
而dynamic_cast可以避免这一情况,当向下赋值时,dynamic_cast会让被修饰的对象的值为空。这样就避免了可能存在的越界访问情况。下面就通过一个简单程序验证一下。
在这里插入图片描述
至于dynamic_cast为什么需要父类提供虚函数?是因为dynamic_cast底层可能是通过标记虚函数表里的虚函数来区分父类和子类的。所以,才能做到区分向上赋值和向下赋值。

使用强制转换之前应该多想一想是否还有别的方式解决。如果能避免使用强制类型转换就应该避免用强制类型转换。这样可以减少强制类型转换潜在的错误。

C++标准提供四个强制类型转换也是希望大家在开发时,能够规范的进行类型转换。这样能够提高代码的可读性和可维护性。实践中,大家按照具体规章制度来即可。

RTTI

RTTI 是 C++ 语言的一个特性,它允许程序在运行时获取对象的类型信息。这种类型信息包括对象的实际类型(比如是某个基类的派生类具体哪一种),以及对象与其他类型之间的关系(如继承关系)。通过 RTTI,程序能够在运行阶段做出基于类型的决策,这在一些复杂的面向对象编程场景中非常有用。

RTTI的操作方式有如下,typeId、 decltype以及dynamic_cast。

RTTI涉及到的一些底层机制有虚函数表以及type_info类。

RTTI的应用

插件系统:在插件系统的开发中,主程序可能需要加载不同类型的插件。这些插件可能是从一个公共基类派生出来的。通过 RTTI,主程序可以在运行时识别插件的具体类型,从而正确地调用插件的功能。例如,一个图形编辑软件可能有多种形状的插件(如圆形插件、矩形插件等),这些插件都继承自一个Shape基类。当软件加载插件时,利用dynamic_cast可以确定插件是哪种具体的形状,进而调用相应的绘制方法。

对象序列化和反序列化:在对象序列化(将对象转换为字节流以便存储或传输)和反序列化(将字节流转换回对象)的过程中,RTTI 可以帮助确定对象的类型。这样可以确保正确地重建对象,尤其是当存在继承关系的对象需要被处理时。例如,一个复杂的游戏存档系统,可能需要对游戏中的各种角色(不同角色类可能有继承关系)进行序列化和反序列化,RTTI 可以用于在反序列化时确定每个角色对象的具体类型。

相关文章:

learn C++ NO.31——类型转换

C语言中的类型转换 在C语言中,当赋值符号两边的类型不匹配的时候,或者是形参类型和实参类型不匹配时,返回值类型与接受返回值类型不匹配时,都会需要类型转换。C语言的类型转换有两种:显示类型转换和隐式类型转换。 显…...

重学 Android 自定义 View 系列(三):自定义步数进度条

前言 本篇文章主要是实现仿QQ步数View,很老的一个View了,但技术永不落后,开搂! 最终效果如下: 1. 结构分析 QQStepView 主要由三个元素组成: 显示一个圆环进度条,通过外环和内环的角度变化来…...

海南华志亿星电子商务有限公司赋能抖音商家成长

在当今瞬息万变的电商时代,抖音凭借其短视频与直播电商的独特模式,迅速崛起并引领潮流。在这场电商变革中,海南华志亿星电子商务有限公司以其卓越的服务质量和创新的运营模式,在抖音电商领域大放异彩,成为众多商家的首…...

数据结构-并查集专题(1)

一、前言 因为要开始准备年底的校赛和明年年初的ACM、蓝桥杯、天梯赛,于是开始按专题梳理一下对应的知识点,先从简单入门又值得记录的内容开始,并查集首当其冲。 二、我的模板 虽然说是借用了jiangly鸽鸽的板子,但是自己也小做…...

共享汽车管理新纪元:SpringBoot框架应用

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示: 图4-1系统工作原理…...

道可云人工智能元宇宙每日资讯|《中国生成式人工智能应用与实践展望》白皮书发布

道可云元宇宙每日简报(2024年11月6日)讯,今日元宇宙新鲜事有: 《重庆市“机器人”应用行动计划(2024—2027年)》发布 近日,重庆市经济和信息化委员会、重庆市教育委员会等八部门印发《重庆市“…...

kaggle学习 eloData项目(1)-数据校验

文章目录 kaggle学习 eloData项目(1)-数据校验(1) 数据基本情况查看(2) 数据校验(3) 数据探究 小结 kaggle学习 eloData项目(1)-数据校验 不能懈怠&#xff0…...

ORACLE RAC用DNS服务器的配置

一、搭建本地YUM源 二、安装DNS全部组建 yum -y install bind* 三、规划您RAC集群所有IP #public 192.168.16.111 rac1.ntt.com rac1 192.168.16.112 rac2.ntt.com rac2 192.168.16.121 rac3.ntt.com rac3 192.168.16.122 rac4.ntt.com rac4 #private 10.10.10.111 rac1-pr…...

vue3 + vite 实现版本更新检查(检测到版本更新时提醒用户刷新页面)

背景 当一个页面很久没刷新,又突然点到页面。由于一些文件是因为动态加载的,当重编后(如前后端发版后),这些文件会发生变化,就会出现加载不到的情况。进而导致正在使用的用户,点击页面发现加载…...

【CSP】爆零的独特姿势

硝烟散,繁花尽,第一次CSP折戟沉沙。 代码拿回来,花几分钟订正下,就是300分。 然而,实战只有100分,还是偷懒得的幸运,觉得第一题题目太简单懒得用文件IO调试... ... 啥也不说了,上图。…...

Git仓库

Git初始 概念 一个免费开源,分布式的代码版本控制系统,帮助开发团队维护代码 作用 记录代码内容,,切换代码版本,多人开发时高效合并代码内容 如何学: 个人本机使用:Git基础命令和概念 多…...

【科研日常】论文投稿的几大状态

Manuscript Submitted(Submitted to Journal):表示论文已经投稿成功,等待期刊工作人员检查论文格式排版、重复率是否符合要求,符合要求的文章会分配给期刊编辑进行处理。 Awaiting Admin Processing:意为等…...

SSLHandshakeException错误解决方案

1、错误提示 调用Http工具报如下异常信息: cn.hutool.core.io.IORuntimeException: SSLHandshakeException: Received fatal alert: handshake_failure2、查询问题 一开始我以为是代码bug,网络bug甚至是配置环境未生效,找了一大圈&#xf…...

python数据结构基础(7)

本节学习最后一种数据结构---图,在很多问题中应用图可以帮助构建思维空间,快速理清思路,解决复杂问题. 图就是一些顶点的集合,这些顶点通过一系列边链接起来.根据边的有向和无向,图分为有向图和无向图.有时图的边上带有权重,本节暂时不将权重作为重点. 计算机通过邻接表或者邻…...

【系统集成项目管理工程师】英语词汇对照表-项目管理类

英语单词(项目管理类)中文解释Activity活动Accept验收Acceptable Quality Level可接受的质量水平Acceptance Standard验收标准Acquisition Plan Review采购计划评审Action处理Active On the Arrow双代号网络图Activity Based Costing (ABC)基于活动的成本…...

购物车-多元素组合动画css

学习 渡一课程 多元素组合动画 练习。 在我们开发购物车功能时,经常会有点击添加按钮,就会有一个小圆点掉进购物车的动画,如下图所示,今天我们通过css来实现。 首先实现多元素组合动画 直接上代码,可以复制到本地使用…...

【计网不挂科】计算机网络期末考试——【选择题&填空题&判断题&简述题】题库(3)

前言 大家好吖,欢迎来到 YY 滴计算机网络 系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 本博客主要内容,收纳了一部门基本的计算机网络题目,供yy应对期中考试复习。大家可以参考 欢迎订阅 YY滴其他专栏!…...

[ vulnhub靶机通关篇 ] 渗透测试综合靶场 DarkHole:1 通关详解 (附靶机搭建教程)

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…...

【LeetCode】移除链表中等于设定值的元素、反转链表

主页:HABUO🍁主页:HABUO 🌜有时候世界虽然是假的,但并不缺少真心对待我们的人🌛 1. 移除链表中设定值的元素 题目:给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所…...

Redis - 主从复制

在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到其他服务器,满⾜故障恢 复和负载均衡等需求。Redis也是如此,它为我们提供了复制的功能,实现了相同数据的多个Redis副 本。复制功能是⾼可⽤Redis的基础&#xff0c…...

UE5 HLSL 学习笔记

half的取值范围是整形的-60000 到 60000,考虑带宽的情况下使用half vector默认为float4 访问可以.xyzw,也可以.rgba,也可以[index],且顺序可以变,比如说.yzwx 矩阵的获取值的方式 第一个行代表获取第1行第0号元素 第…...

一个简单ASP.NET购物车设计

思路&#xff1a; 创建一个多选列表 在cs文件里初始化购物车会话变量,同&#xff0c;创建一个新的 List<string> 并将其赋值给会话状态中的 "Cart" 键–&#xff08;利用Session&#xff09; Session 是一种用于存储用户特定信息的对象&#xff0c;这些信息可…...

双向循环列表

双向循环列表的实现。 根据定义实现。不解释&#xff0c;具体细节看代码。 list.h #pragma once#pragma pack(1)typedef struct _MyListEntry {_MyListEntry* next;_MyListEntry* prev; }MyListEntry;#pragma pack()class MyListClass { public:MyListEntry* m_list0;int m_k…...

go项目出现了ambiguous import要怎么解决?

前言 最近小编在 构建一个项目时出现了问题&#xff0c;提示报错里ambiguous import&#xff1b;查询了解到是 依赖包存在多个不同版本的问题 这样的情况要怎么解决呢&#xff1f; 小编先是将问题抛给了 chatgpt&#xff0c;得到了如下的信息&#xff1a; # 清理缓存 go clea…...

更改Ubuntu22.04锁屏壁纸

更改Ubuntu22.04锁屏壁纸 sudo apt install gnome-shell-extensions gnome-shell-extension-manager安装Gnome Shell 扩展管理器后&#xff0c;打开“扩展管理器”并使用搜索栏找到“锁屏背景”扩展...

ROS2humble版本使用colcon构建包

colcon与与catkin相比&#xff0c;没有 devel 目录。 创建工作空间 首先&#xff0c;创建一个目录 ( ros2_example_ws ) 来包含我们的工作区: mkdir -p ~/ros2_example_ws/src cd ~/ros2_example_ws 此时&#xff0c;工作区包含一个空目录 src : . └── src1 directory, …...

CSRF 跨站请求伪造的实现原理和预防措施

CSRF&#xff08;跨站请求伪造&#xff09;概述 CSRF&#xff08;Cross-Site Request Forgery&#xff09;&#xff0c;即跨站请求伪造&#xff0c;是一种攻击手段&#xff0c;攻击者利用受害者在网站上已认证的身份信息&#xff0c;诱使受害者发起未经授权的请求&#xff0c;从…...

【LeetCode】【算法】22. 括号生成

LeetCode 22. 括号生成 题目描述 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 解题思路 天天到处看答案&#xff0c;看的灵神的解题思路回溯不会写&#xff1f;套路在此&#xff01;&#xff08;Pyth…...

WPF+MVVM案例实战与特效(二十五)- 3D粒子波浪效果实现

文章目录 1、案例效果2、案例实现1、文件创建2. 功能代码实现3、粒子功能应用1、前端布局与样式2、代码解释2、 后端功能代码1、案例效果 2、案例实现 1、文件创建 打开 Wpf_Examples 项目、Models 文件夹下创建 3D粒子模型类 ParticleWaveEffectModel.cs 文件。在Tools 文件…...

wsl2安装和使用

WSL(Windows Subsystem for Linux)是一个在 Windows 操作系统上运行 Linux 二进制可执行文件的兼容层。它允许用户在 Windows 上运行 Linux 命令行工具和应用程序。 主要功能 简化开发流程:开发者可以在 Windows 上使用 Linux 的开发工具链。兼容性:支持多种 Linux 发行版,…...