【C++】static_cast基本用法(详细讲解)

news2024/10/2 20:28:28

请添加图片描述


👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉公众号👈:测试开发自动化【获取源码+商业合作】
👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。


C++中static_cast如何使用(详细讲解)


目录

  • C++中static_cast如何使用(详细讲解)
  • 1. 使用场景
    • 1.1 基础数据类型的转换
    • 1.2 指向派生类的指针或引用转换为指向基类的指针或引用
    • 1.3 指向基类的指针或引用转换为指向派生类的指针或引用
    • 1.4 在有关联的类型之间进行转换
  • 2. 限制
  • 3. 优点
  • 4. 注意


static_cast 是 C++ 中四个命名强制类型转换操作符之一。它用于执行各种不同类型之间的转换。以下是关于 static_cast 的更详细的解释:

1. 使用场景

1.1 基础数据类型的转换

可以将一种基础数据类型转换为另一种基础数据类型。例如,将 double 转换为 int,或将 float 转换为 double 等。

double d = 5.5;
int i = static_cast<int>(d);  // i = 5

1.2 指向派生类的指针或引用转换为指向基类的指针或引用

class Base {};
class Derived : public Base {};
Derived derivedObj;
Base* basePtr = static_cast<Base*>(&derivedObj);

1.3 指向基类的指针或引用转换为指向派生类的指针或引用

但这是不安全的,因为在转换过程中没有运行时检查。如果确实需要运行时检查,应使用 dynamic_cast

Base* basePtr = new Base();
Derived* derivedPtr = static_cast<Derived*>(basePtr); // 不安全!

1.4 在有关联的类型之间进行转换

例如,转换枚举值为整数。

enum Color { RED, GREEN, BLUE };
int value = static_cast<int>(GREEN);  // value = 1

2. 限制

  • 不能用于转换不相关的指针或引用类型。例如,不能将 void* 转换为其他类型的指针,或反之。在这种情况下,应使用 reinterpret_cast

  • 不能用于移除或添加 const 限定符。在这种情况下,应使用 const_cast


3. 优点

  • 相对于 C 风格的强制转换(如 (int)3.14),static_cast 更加明确和可读。
  • 与 C 风格的强制转换相比,static_cast 只能执行明确允许的转换,这有助于避免一些错误。

4. 注意

使用 static_cast 时,需要确保转换在逻辑上是合理的,因为 static_cast 不执行运行时类型检查。如果对转换不确定,考虑使用其他类型的转换,如 dynamic_cast,或者重新评估设计,以避免需要转换。

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

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

相关文章

ffmepg滤镜

视频按顺时针方向旋转90度 ffplay -vf transpose1 -i juren-30s.mp4 ffplay -f lavfi -i testsrc -vf transpose1 -f lavfi -i testsrc这个滤镜是ffmpeg给用户的一个测试使用的视频 视频水平翻转(左右翻转) -vf hflip 实现慢速播放&#xff0c;声音速度是原始速度的50% ffpla…

pycharm,VSCode 几个好用的插件

pycharm Tabnine AI Code 可以在编写程序的时候为你提供一些快捷方式&#xff0c;增加编程速度 Chinese 对英文不好的程序员来说是个不错的选择&#xff0c;可以将英文状态下的pycharm变为中文版的 ChatGPT 可以跟ai聊天&#xff0c;ai可以解决你80%的问题 &#xff0c;也可以帮…

10个AI绘图生成器让绘画更简单

AI不仅影响商业和医疗保健等行业&#xff0c;还在创意产业中发挥着越来越大的作用&#xff0c;开创了AI绘画生成器新时代。在绘画领域当然也是如此&#xff0c;与传统的绘画工具不同&#xff0c;AI人工智能时代的绘画工具是全自动的、智能的&#xff0c;甚至可以说是“傻瓜式”…

nginx负载均衡的几种配置方式介绍

一.负载均衡含义简介 二.nginx负载均衡配置方式 准备三台设备&#xff1a; 2.190均衡服务器&#xff0c;2.191web服务器1&#xff0c;2.160web服务器2&#xff0c;三台设备均安装nginx&#xff0c;两台web服务器均有网页内容 1.一般轮询负载均衡 &#xff08;1&#xff09…

CMake: 检测并使用OpenMP的并行环境

CMake: 检测OpenMP的并行环境 导言OpenMP简介项目结构CMakeLists.txt相关源码输出结果 导言 目前&#xff0c;市面上的计算机几乎都是多核机器&#xff0c;对于性能敏感的程序&#xff0c;我们必须关注这些多核处理器&#xff0c;并在编程模型中使用并发。OpenMP是多核处理器上…

重零搭建SpringSecurity +JWT

1、前期工作&#xff08;创建父工程&#xff0c;导入依赖&#xff09; 2、创建启动类 3、测试项目&#xff0c;启动后访问8080端口、hello看有没有页面 4、引入springSecurity依赖&#xff08;重新启动&#xff0c;再访问/hello,会跳转到登录页面&#xff0c;用户名是 user,密码…

系统集成项目管理工程师好考吗?不报班能考过吗?

即使不参加培训班&#xff0c;只要自我控制能力还不错&#xff0c;也可以通过考试。中级集成考试难度不大&#xff0c;主要是要理解47个过程的输入输出和工具的使用&#xff0c;很多题目都是按照这个逻辑出的。建议可以在网上或者刷题APP上找一些资料和真题来练习&#xff0c;因…

Ajax 笔记(二)—— Ajax 案例

笔记目录 2. Ajax 综合案例2.1 案例一-图书管理2.1.1 渲染列表2.1.2 新增图书2.1.3 删除图书2.1.4 编辑图书 2.2 案例二-背景图的上传和更换2.2.1 上传2.2.2 更换 2.3 案例三-个人信息设置2.3.1 信息渲染2.3.2 头像修改2.2.3 信息修改2.3.4 提示框 Ajax 笔记&#xff1a; Ajax…

全新 – Amazon EC2 M1 Mac 实例

去年&#xff0c;在 re: Invent 2021 大会期间&#xff0c;我写了一篇博客文章&#xff0c;宣布推出 EC2 M1 Mac 实例的预览版。我知道你们当中许多人请求访问预览版&#xff0c;我们尽了最大努力&#xff0c;却无法让所有人满意。不过&#xff0c;大家现在已经无需等待了。我很…

【C语言】实现通讯录(动态+文件)

目录 前言&#xff1a;一.创建多文件二.保存人的通讯录信息三.构建菜单 - test.c四.函数的声明五.函数的实现1.初始化通讯录2.增加指定联系人3.删除指定联系人4.查找指定联系人5.修改指定联系人6.排序联系人信息&#xff08;排序名字&#xff09;7.清理通讯录8.文件存盘 六.全部…

28 玻尔兹曼机

文章目录 28 玻尔兹曼机28.1 模型定义28.2 梯度推导28.3 梯度上升28.4 基于VI[平均场理论]求解后验概率 28 玻尔兹曼机 28.1 模型定义 玻尔兹曼机是一张无向图&#xff0c;其中的隐节点和观测节点可以有任意连接如下图&#xff1a; 我们给其中的节点、连线做出一些定义&#…

css内容达到最底部但滚动条没有滚动到底部

也是犯了一个傻狗一样的错误 &#xff0c;滚动条样式是直接复制的蓝湖的代码&#xff0c;有个高度&#xff0c;然后就出现了这样的bug 看了好久一直以为是布局或者overflow的问题&#xff0c;最后发现是因为我给这个滚动条加了个高度&#xff0c;我也是傻狗一样的&#xff0c;…

认识Node.js及三个模块

文章目录 1.初识 Node.js1.1 什么是 Node.js1.2 Node.js 中的 JavaScript 运行环境1.3 Node.js 可以做什么1.4 Node.js 环境的安装1.4.1 区分 LTS 版本和 Current 版本的不同1.4.2 查看已安装的 Node.js 的版本号1.4.3 什么是终端1.4.4 终端中的快捷键 1.5 在 Node.js 环境中执…

云安全攻防(七)之 容器逃逸

容器运行时的安全风险 运行时的容器可能发生的攻击形式数不胜数&#xff0c;然而归根结底&#xff0c;所有攻击影响的还是业务系统的机密性、完整性和可用性&#xff08;CIA三要素&#xff09;。从这个角度出发&#xff0c;我们可以将攻击做以下的分类&#xff1a; 主要影响机…

从零开始学python(十七)JS逆向专题,看完直接入门

前言 今天讲述Python框架源码专题最后一个部分&#xff0c;爬虫集群部署&#xff0c;前面更新了十五个从零开始学python的系列文章&#xff0c;分别是&#xff1a; 编程语法/网络编程/多线程/多进程/协程/数据库机器学习/全栈开发/数据分析/Hadoop篇/Spark篇爬虫/自动化和抓包…

CMU 15-445 -- Distributed OLAP Databases -21

CMU 15-445 -- Distributed OLAP Databases -21 引言OLTP and OLAPStar Schema vs. Snowflake SchemaProblem Setup本节大纲Execution Models&#xff1a;Push vs. PullExample #1: Push Query to Data in Shared-Nothing ArchitectureExample #2: Pull Data to Query in Share…

ARP协议原理与应用

ARP协议原理与应用 一、ARP协议概述1.1、场景描述1.2、ARP协议概述 二、ARP协议工作原理2.1、ARP工作流程2.2、ARP工作原理2.3、ARP缓存表 三、ARP协议分类3.1、免费ARP&#xff08;Gratuitous ARP &#xff09;3.2、代理ARP&#xff08;Proxy ARP &#xff09;3.3、RARP与IARP…

详解lambda表达式(一):表达式定义与异常处理

目录 一、lambda表达式 二、lambda表达式实现函数接口 2.1 函数式接口 2.2 lambda表达式实现无参抽象方法 2.3 lambda表达式实现有参抽象方法 2.4 lambad表达式使用代码块 三、lambda表达式调用外部变量 3.1 lambda表达式可以更改类成员变量 3.2 lambda表达式无法更改…

jvs-rules API数据源配置说明(含配置APIdemo视频)

在JVS中&#xff0c;多数据源支持多种形态的数据接入&#xff0c;其中API是企业生产过程中常见的数据形态。使用数据源的集成配置&#xff0c;以统一的方式管理和集成多个API的数据。这些平台通常提供各种数据转换和处理功能&#xff0c;使得从不同数据源获取和处理数据变得更加…

datax-web报错收集

在查看datax时发现日志出现了如上错误&#xff0c;因为项目是部署在本地linux虚拟机上的&#xff0c;使用的是nat网络地址转换&#xff0c;不知道为什么虚拟机的端口号发生了变化&#xff0c;导致数据库根本连接不进去&#xff0c;更新linux虚拟机的ip地址就好