读写权限详解

2023-11-18

本篇博客主要通过三个问题来理清C/C++中的读写权限问题:

const变量可以赋值给非const引用吗?

const变量的地址可以赋值给非const指针吗?

const普通变量可以给非const普通变量赋值吗?

在此之前,我们得先明白读写权限的一个基本原理:读写权限只能缩小,不能放大。

现在我们先来看第一段代码:

int main()
{
    const int a = 0;
    const int a2 = 0;
    const int& r = a;
    int& r2 = a2;//报错

    return 0;
}

在上述代码中,第五行代码没有任何问题,因为变量a是const的,只能读不能写,赋值给引用变量r,我们依然只能通过引用r来读a,而不能通过引用r修改a,因此a的读写权限没有发生任何变化,所以第五行代码没有任何问题。

第六行代码中,a2也是const的,只能读不能写,将a2赋值给非const引用变量r2,非const引用变量r2是既可以读可以写的,那就可以通过r2修改a2,那么a2的读写权限就变大了,这是不被允许的,因此会报错。

通过这个例子,我们可以解决第一个问题:const变量可以赋值给const引用,但是const变量不能赋值给非const引用,因为这会造成const变量读写权限的放大,是不被允许的。

接着后面,我们来看第二段代码:

int main()
{
    const int a = 0;
    const int a2 = 0;
    const int* r = &a;
    int* r2 = &a2;//报错
    
    return 0;
}

在上面的代码中,第五行代码没有任何问题,变量a是const的,将它的地址赋值给const指针,我们依然只能通过指针r来读a,而不能通过指针r修改a,因此a的读写权限没有发生任何变化,所以第五行代码没有任何问题。

第六行代码中,a2也是const的,只能读不能写,将a2赋值给非const指针变量r2,非const指针变量r2是既可以读可以写的,那就可以通过r2修改a2,那么a2的读写权限就变大了,这是不被允许的,因此会报错。

通过这个例子,我们可以解决第二个问题:const变量的地址可以赋值给const指针,但是const变量的地址不能赋值给非const指针,因为这会造成const变量读写权限的放大,是不被允许的。

最后,我们来看第三段代码:

int main()
{
    const int a = 0;
    int b = a;

    return 0;
}

上述代码完全没有任何问题,尽管是const变量赋值给非const变量,但是赋值后,变量b是变量b,变量a是变量a,只是把a的值赋值给了b而已,除此之外,a和b没有任何关系,变量a的读写权限并没有任何变化,因此该段代码没有任何问题。

通过这个例子我们可以解决第三个问题:普通变量的赋值不会引起读写权限的改变。const普通变量可以赋值给const普通变量,const普通变量也可以赋值给非const普通变量。


 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

读写权限详解 的相关文章

随机推荐

  • java中long最大值源码表示_通过JDK源码角度分析Long类详解

    概况 Java的Long类主要的作用就是对基本类型long进行封装 提供了一些处理long类型的方法 比如long到String类型的转换方法或String类型到long类型的转换方法 当然也包含与其他类型之间的转换方法 除此之外还有一些位
  • MySQL简述1

    MySQL是什么 MySQL优点 MySQL的四种分类 数据库的三大范式 多表查询 左连接 右连接 内连接 交叉连接 显式 隐式 子查询 事物 特性 原子性 一致性 隔离性 持久性 并发问题 脏读 读未提交 不可重复读 读已提交 幻读 可重
  • 机器学习之高斯过程

    高斯过程 高斯过程 Gaussian Process 高斯分布 置信区间 随机过程 高斯分布的特点 核函数 白噪声处理 实战 高斯过程 Gaussian Process 在机器学习领域里 高斯过程是一种假设训练数据来自无限空间 并且各特征都
  • Fiddler 微信小程序抓图教程(非常详细)从零基础入门到精通,看完这一篇就够了

    前言 本篇文章主要给大家详细讲解如何用Fiddler爬取微信小程序的图片 内容图文并茂 流程非常简单 我们开始吧 目录 一 获取软件并打开 二 点击工具设置相关代理 三 如何抓图 四 答疑 五 总结 一 获取软件并打开 1 通过百度网盘下载
  • 因果推断----do演算

    do演算 合法 的do表达式变换 规则1 如果我们观察到变量W与Y无关 其前提可能是以其他变量Z为条件 那么Y的概率分布就不会随W而改变 即 P Y d
  • vue3+elementPlus-浏览器告警解决error.ts:14 ElementPlusError: [ElPagination] 你使用了一些已被废弃的用法,请参考 el-pagination

    问题 在使用elementuiPlus的分页器组件的时候 发现会有如下图警告 检查代码
  • 微信小程序父组件向子组件传参,子组件样式无效问题处理

    微信小程序父组件向子组件传参 子组件样式无效问题处理 父组件代码 引入 json usingComponents evaluate evaluate evaluate wxml
  • dp 1.4协议_浅析关于HDMI接口与DP接口

    显示器现在主流已经为HDMI接口与DP接口 那么这些接口都有什么区别 以下表格会大致做个区分 建议优先使用DP接口 HDMI2 1接口目前仅发布协议 尚未大规模商用在高清电视机上有部分应用 Mini DP接口版本为DP1 2 HDMI2 1
  • libcurl库安装心得

    一 libcurl简介 libcurl是一个跨平台的网络协议库 支持http https ftp gopher telnet dict file 和ldap 协议 libcurl同样支持HTTPS证书授权 HTTP POST HTTP PU
  • JSON工具类

    在实际开发中通服都是使用JSON格式数据 那么如何跟JSON打交道呢 下面就写一些JSON的常用转换工具 以及JSON数据提取 目录 阿里的FastJSON JSONObject类 JSON类 JSONArray JSONPath Json
  • 分子对接教程

    TCGA GEO 文献阅读 数据库 理论知识 R语言 Bioconductor 服务器与Linux 接前文 分子对接教程 1 软件安装准备 分子对接教程 2 选择合适的蛋白受体 分子对接教程 3 配体分子文件格式转换 分子对接教程 4 蛋白
  • QT 中文版信息提示框

    引言 在QT设计UI程序过程中 整套系统都是中文版本 然而信息提示默认只有中文 难免有点小纠结 这里针对QMessageBox稍微做了一点点改进 使其支持完美的中文提示框 调用方式非常简单 只需要将QMessageBox调用地方 改为QSh
  • 专家PID

    专家PID 专家控制 专家控制是模拟人类专家控制的方式 它具有大量的专门知识和经验 和专家控制一样不需要知道对象的模型的情况下 对系统进行控制 专家控制的基本结构 和人类专家控制一样 知识库越是丰富 推理机越是精确 控制效果也就越好 不同的
  • 数据结构C++ 栈Stack求值算法

    来自邓俊辉老师的数据结构 C 版 第95页 readNumber函数 可读整数和小数 注意 下列代码是直接用C 内部写好的stack实现的 而不是书中给出的stack模板 发现更简洁的readNumber函数 float readNumbe
  • 使用Vue解决跨域问题

    如果你是一个Web前端工程师 那么跨域这个问题肯定是绕不开的 1 创建 vue config js 设置 devServer 属性 module exports devServer webpack dev server配置 host loc
  • ECS共享型s6和ECS突发性能型t6的区别选择哪个好?

    WP建站 一个专注于wordpress学习的 关注他 2 人赞同了该文章 这两个类型的阿里云ecs服务器的话 一般在这两个中二选一的话我们建议优先选择ECS共享型s6 我们简单的来说说他们的一些区别和特点吧 首先我们要知道的是他们都是独立的
  • 线性代数-----行列式的性质

    行列式的性质 设 D a 11
  • cosmos测试网络结点搭建完整流程

    第一步 下载golang并安装 配置环境变量 wget https dl google com go go1 13 8 linux amd64 tar gz tar C usr local xzf go VERSION OS ARCH ta
  • CSDN周赛66期图文题解 - 路灯亮度 & 池塘水量

    本期非编程题考察更多是对原书的阅读理解 可能还是因为自己理解不够 翻了半天书 还是错了两道 失之我命 不多废话 本期编程题比较符合我的胃口 有陷阱 有技巧 窃以为是最近不少期里比较有意思的中等难度的题目了 美中不足的是两道题都没有给出数据范
  • 读写权限详解

    本篇博客主要通过三个问题来理清C C 中的读写权限问题 const变量可以赋值给非const引用吗 const变量的地址可以赋值给非const指针吗 const普通变量可以给非const普通变量赋值吗 在此之前 我们得先明白读写权限的一个基