c++ 11 新特性 不同数据类型之间转换函数之const_cast

一.不同数据类型之间转换函数const_cast介绍

const_cast是C++11中引入的一种类型转换操作符,用于修改类型的constvolatile属性const_cast的主要用途是移除对象的常量性,它是唯一具有此能力的C++风格的转型操作符。在C++11中,const_cast可以完成以下类型转换:

  • 常量指针转非常量指针:当有一个指向常量的指针时,可以使用const_cast将其转换为指向非常量的指针,这样就能够修改原来被指向的常量对象的值。
  • 常量引用转非常量引用:与指针类似,如果有一个指向常量的引用,可以使用const_cast将其转换为非常量的引用。
  • 多级指针的转换:两个可能指向同一类型的多级指针可以相互转换,而不考虑每一层上的cv性质(即constvolatile)。
  • 空指针值的转换:空指针值可以转换为新类型的空指针值。

需要注意的是,const_cast不是用于去除变量的常量性,而是用于去除指向常数对象的指针或引用的常量性。其去除常量性的对象必须为指针或引用。在使用const_cast时,需要特别小心,因为虽然它可以去除const属性,但这并不意味着原来的常量对象可以被修改,除非该对象本身并不是const此外,如果尝试修改一个真正的常量对象,将会导致未定义行为。

二. const_cast 使用示例

1.常量指针转非常量指针

#include <iostream>

int main() {
    const int a = 10;
    int* p = const_cast<int*>(&a);
    *p = 20;
    std::cout << "a: " << a << std::endl;
    std::cout << "*p: " << *p << std::endl;
    return 0;
}

 运行结果:

2.常量引用转非常量引用 

#include <iostream>

int main() {
    const int a = 10;
    const int& r = a;
    int& nr = const_cast<int&>(r);
    nr = 20;
    std::cout << "a: " << a << std::endl;
    std::cout << "r: " << r << std::endl;
    std::cout << "nr: " << nr << std::endl;

    return 0;
}

运行结果:

 

3. 空指针值的转换

#include <iostream>

int main() {
    int* p = nullptr;
    int** pp = const_cast<int**>(reinterpret_cast<const int**>(p));
    std::cout << "pp: " << pp << std::endl;

    return 0;
}

运行结果:

 

         可以看到,通过const_cast将空指针值转换为新类型的空指针值后,得到的是一个空指针。需要注意的是,这里的转换使用了reinterpret_cast进行类型转换,这是因为const_cast不能直接将空指针值转换为非空指针类型。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux安装,配置,启动HBase

Linux安装&#xff0c;配置&#xff0c;启动HBase 一、HBase安装&#xff0c;配置 1、下载HBase安装包 Hbase官方下载地址: http://archive.apache.org/dist/hbase 选择相应的版本点击下载&#xff0c;这里以2.3.5为例 # linux可以通过wget命令下载 wget https://archive…

如何解决Firefox提示“此网站可能不支持TLS1.2协议”的问题 错误代码:SSL_ERROR_UNSUPPORTED_VERSION

1.问题描述 当你在Firefox浏览器中访问一个网站时&#xff0c;可能会遇到这样的提示&#xff1a;   之后&#xff0c;不停地刷新或 重新输入&#xff0c;怎么也访问不进去&#xff1f;&#xff1f; 2.解决步骤 按照以下步骤操作&#xff0c;可以降低Firefox对TLS版本的要求…

HEUFT电源维修x-ray发生器维修HBE211226

HEUFT电源维修x-ray发生器维修HBE211253;海富HEUFT在线液位检测X射线发生器维修&#xff0c;不限型型号系列。 德国海富推出HEUFT在线液位检测装置,满瓶检测系统HEUFT有着强大的功能,它的模块机构能整合很多程序,并依据不同的产品及其包装特性,照相技术,高频技术或X-ray技术。…

[eslint error] ‘v-model‘ should be on a new line.

错误详情 错误原因 此问题是由于.eslintrc.js文件中的vue/max-attributes-per-line配置错误产生的 esline默认要求属性单独开一行 错误解决 所以解决的方法有两个一个是遵从eslint默认规则让属性新开一行,能解决问题 但是我不喜欢看这样子的代码,所以我只好去改掉eslint的规…

声强和能量及其praat操作

强度、声压、能量、功率 这是我们在电学和声学等领域较常见到的词汇&#xff0c;但有时候可能会搞混淆&#xff0c;所以再整理一下。 强度&#xff08;intensity&#xff09; 强度&#xff0c;也叫做声强&#xff08;Sound intensity&#xff09;。《声学基础》中对于声强的…

Unity 关节:铰链、弹簧、固定、物理材质:摩檫力、 特效:拖尾、

组件-物理-关节&#xff1a;铰链&#xff08;类似门轴&#xff09; 自动动作、多少力可以将其断开、 弹簧可以连接另一个刚体&#xff08;拖动即可&#xff09; 固定一般是等待一个断裂力&#xff0c;造成四分五裂的效果。 物理材质 设置摩檫力&#xff0c;则可以创造冰面的…

K8S之实现业务的金丝雀发布

如何实现金丝雀发布 金丝雀发布简介优缺点在k8s中实现金丝雀发布 金丝雀发布简介 金丝雀发布的由来&#xff1a;17 世纪&#xff0c;英国矿井工人发现&#xff0c;金丝雀对瓦斯这种气体十分敏感。空气中哪怕有极其微量的瓦斯&#xff0c;金丝雀也会停止歌唱&#xff1b;当瓦斯…

redis缓存(穿透, 雪崩, 击穿, 数据不一致, 数据并发竞争 ), 分布式锁(watch乐观锁, setnx, redission)

redis的watch缓存机制 WATCH 机制原理&#xff1a; WATCH 机制&#xff1a;使用 WATCH 监视一个或多个 key , 跟踪 key 的 value 修改情况&#xff0c;如果有key 的 value 值在事务 EXEC 执行之前被修改了&#xff0c;整个事务被取消。EXEC 返回提示信息&#xff0c;表示 事务已…

蓝桥杯——矩形拼接

矩形拼接 题目分析 对于一个矩形而言&#xff0c;我可以把它横着放&#xff0c;而可以把它竖着放&#xff0c;比如下图&#xff0c; 3个矩形的拼接情况可以通过在纸上画图模拟出来&#xff0c;情况有以下三种 ​ 图1 图3是4条边&#xff0c;即四边形。观察一下什么时候会是四…

邮件api有哪些作用?使用API发邮件的方法?

邮件api接口发信的流程&#xff1f;如何使用邮件API发送邮件&#xff1f; 在现代的数字化社会&#xff0c;电子邮件成为了人们日常生活和工作中不可或缺的一部分。为了提高邮件处理的效率和自动化程度&#xff0c;邮件API的应用越来越广泛。那么&#xff0c;邮件API究竟有哪些…

FMEA视角下的未来:拥抱变化,探索无限可能!

在快速发展的现代社会中&#xff0c;预测未来变得越来越具有挑战性。FMEA&#xff08;失效模式与影响分析&#xff09;作为一种预防性质量工具&#xff0c;虽然主要用于评估产品设计或过程中的潜在故障&#xff0c;但其核心理念——识别风险、预防失误&#xff0c;同样适用于我…

使用anaconda管理多python版本环境

anaconda使用 安装 下载地址 miniconda anaconda 两者区别 Miniconda只包含了conda和Python&#xff0c;以及一些必要的依赖项&#xff0c;它的安装文件较小&#xff0c;占用空间较少&#xff0c;用户可以根据需要自行安装其他的包。Anaconda包含了conda、Python和超过150…

Android应用界面

概述&#xff1a;由于学校原因&#xff0c;估计会考&#xff0c;曹某人就浅学一下。 View概念 安卓中的View是所有UI控件的基类&#xff0c;它代表着屏幕上的一个矩形区域&#xff0c;用于展示数据和接收用户事件。 UI控件的基础&#xff1a;在Android开发中&#xff0c;Vie…

SpringCloud 微服务架构编码构建

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅&#xff0c;从传统的模块之间调用&#xff0c;一步步的升级为 SpringCloud 模块之间的调用&#xff0c;此篇文章为第一篇&#xff0c;即不使用 SpringCloud 组件进行模块之间的调用&#xff0c;后续会有很多的文章循序渐…

12.WEB渗透测试-Linux系统管理、安全加固(下)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;11.WEB渗透测试-Linux系统管理、安全加固&#xff08;上&#xff09;-CSDN博客 Linux任务…

(二十二)从零开始搭建k8s集群——高可用kubernates集群搭建上篇

前言 本节内容分为上、中、下三篇&#xff0c;上篇主要是关于搭建k8s的基础环境&#xff0c;包括服务器基本环境的配置&#xff08;网络、端口、主机名、防火墙、交换分区、文件句柄数等&#xff09;、docker环境部署安装配置、镜像源配置等。中篇会介绍k8s的核心组件安装、k8…

STM32 学习10 PWM输出

STM32 学习10 PWM输出 一、PWM简介1. PWM的概念2. PWM的工作原理3. PWM 常用的应用场景 二、一些概念1. 频率2. 占空比 三、STM32F1 PWM介绍1. 定时器与寄存器&#xff08;1&#xff09;**自动重装载寄存器&#xff08;ARR&#xff09;**&#xff1a;&#xff08;2&#xff09;…

商业前端TS开发自动化工具

本期作者 一、背景 商业侧的业务比较复杂&#xff0c;B端项目中含有大量常量类的类型判断&#xff0c;且因历史原因&#xff0c;很多常量值前端无法直接知其含义&#xff0c;这既不利于新人的上手&#xff0c;也不利于项目的维护。 在开发协作上&#xff0c;前后端的API沟通&a…

面向对象中类与对象

思考系统1000个对象逻辑结构 理解系统1000个对象物理结构 对象this 引用 类的静态变量和静态函数 静态变量和静态函数属于类本身&#xff0c;而不是类的实例。它们可以在不创建类的实例的情况下直接通过类名访问。静态变量在内存中只有一份拷贝&#xff0c;被所有实例共享&…

人工智能(AI)与电网系统的结合

人工智能&#xff08;AI&#xff09;与电网系统的结合可以带来许多潜在的好处&#xff0c;包括提高电网的运行效率、安全性和可靠性。以下是一些主要的应用领域&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交…