C++: const 的 权限放大缩小!

目录

概念

引用与const  

关于上述的第一段代码:

关于上诉的第二段代码:

const 使用指针进行权限的放大和缩小:

注意事项: 

const 与 成员函数 

const 修饰 成员函数的规则:


 

概念

  • 关于权限的放大和缩小问题,在文件领域讲诉可以理解为,当某个文件具有读取权限时,我们赋予这个文件读写权限,这个过程叫做权限的放大,而反之,当某个文件同时具有读写功能,但是我们限制了它其中的一个功能,这就叫做权限的缩小
  • 而将权限放大缩小放在C++的指针和引用中,便是变量的数值是否能够修改的问题,如果将变量的数值从可以修改变到不能修改,则是权限的缩小,而将变量的数值从不可以修改变成可以修改,则是权限的放大但是在指针和引用中,权限放大是不可取的!

引用与const  

const通常就是用来限制变量可以改,也就是这个变量的值不能被修改,结合上面的权限问题,我们来看以下例子: 

1.
int a = 10;
const int& A = a;  // 
int& AA = A;  // 

2.
const int b = 20;
int& B = b;  // 
const int& BB = B;  // 
  • 关于上述的第一段代码:

  1. A a的别名,在加上const 之前 A a 是共享一个空间的 ,A 就是 a ,但是在使用 const 进行修饰后,使得 A 只能是 a 也就是 10 这个数值,当 a 发生改变后 ,A不能像别的别名一样,因为数值的改变而发生改变,A只能是10,这就是 权限的缩小
  2. Aconst 进行修饰后,变成了一个不能修改的数值,当 AA这个别名对A进行修饰时,AA 可以随意的更改A 的数值,但A是不能更改的,这导致了权限的冲突,这也就是权限的放大,由不可以修改数值的A 变成可以修改数值的AA
  • 关于上诉的第二段代码:

  1. 使用了 const 修饰了变量 b,使得b变成一个不可以改变数值的变量,而当B进行别名的修饰时,因为Bb的别名,根据别名的功能,可以导致B修改数值的时候,b的数值也会被修改,所以导致了权限的放大
  2. Bconst 修饰的BB进行别名引用,因为加上了const 导致BB不能修改B的数值,这属于是权限的平移 

const 使用指针进行权限的放大和缩小:

int *p1 = &i ;
const int *p2 = p1;//权限的缩小

const int *p1 = &i;
int *p2 = p1; //权限的放大,放大是不可取的!错误的!

注意事项: 

const int i = 10;
int j = i ;

//注意事项,这里的j并不能对i的数值进行改变,同时也不属于权限的平移,这里只是一种数值的拷贝罢了

const 与 成员函数 

将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数 隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。 

const 修饰 成员函数的规则:

  1. const对象可以不调用非const成员函数,这属于权限放大
  2. 非const对象可以调用const成员函数,这属于权限缩小
  3. const成员函数内不可以调用其它的非const成员函数,这属于权限放大
  4. 非const成员函数内可以调用其它的const成员函数,这属于权限缩小

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

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

相关文章

【C++】【类和对象】拷贝构造函数

1.拷贝构造函数的特性: 1.拷贝构造函数用来构造一个与已存在对象一摸一样的对象 它只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型对象创建新对象时由编译器自动调用。 2.拷贝构造函数是构造函数的一种重…

gcore服务器设置root账号密码登录

这个厂商很奇怪,默认只能用centos用户与公钥登录,但是这样有时候很麻烦。 他默认开启了SELinux,和强制ssh密钥登录。 下面所有操作在root模式下进行 SELinux设置为兼容模式 setenforce 0vi /etc/selinux/config然后将文件中的SELINUXenfo…

分享88个表单按钮JS特效,总有一款适合您

分享88个表单按钮JS特效,总有一款适合您 88个表单按钮JS特效下载链接:https://pan.baidu.com/s/1v-qcl8bv2kxZ8a98Xo9UAg?pwd8888 提取码:8888 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,…

滑动小短剧影视微信小程序源码/带支付收益等模式

仿抖音滑动小短剧影视微信小程序源码,带支付收益等模式、支持无限滑动;高性能滑动、预加载、视频预览,支持剧情介绍,集合壁纸另外仿抖音滑动效果;支持会员模式,支持用户单独购买等等多功能。 丰富的后台设…

备战蓝桥杯---数学基础3

本专题主要围绕同余来讲&#xff1a; 下面介绍一下基本概念与定理&#xff1a; 下面给出解这方程的一个例子&#xff1a; 下面是用代码实现扩展欧几里得算法&#xff1a; #include<bits/stdc.h> using namespace std; int gcd(int a,int b,int &x,int &y){if(b…

极狐GitLab 使用阿里云作为 OmniAuth 身份验证 provider

使用阿里云作为 OmniAuth 身份验证 provider 您可以启用阿里云 OAuth 2.0 OmniAuth provider并使用您的阿里云账户登录极狐GitLab。 创建阿里云应用 登录阿里云平台&#xff0c;在上面创建一个应用。阿里云会生成一个 client ID and secret key 供您使用。 登录到阿里云平台…

STM32Cubmax AD采集

一、基本概念 二、项目 AD函数结构体 typedef struct { uint32_t Mode; // ADC 工作模式选择 FunctionalState ScanConvMode; /* ADC 扫描&#xff08;多通道&#xff09; 或者单次&#xff08;单通道&#xff09;模式选择 */ FunctionalState ContinuousConvMode; // ADC 单…

【JavaEE】_HTML常用标签

目录 1.HTML结构 2. HTML常用标签 2.1 注释标签 2.2 标题标签&#xff1a;h1~h6 2.3 段落标签&#xff1a;p 2.4 换行标签&#xff1a;br 2.5 格式化标签 2.6 图片标签&#xff1a;img 2.7 超链接标签&#xff1a;a 2.8 表格标签 2.9 列表标签 2.10 表单标签 2.10…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 2月11日,星期日

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年2月11日 星期日 农历正月初二 1、 2024年总台春晚传播数据创下新纪录&#xff1a;全媒体累计触达267亿次&#xff0c;较去年增长29%。 2、 交通运输部&#xff1a;除夕全社会跨区域人员流动量超1.9亿人次。 3、 微信&am…

Backtrader 文档学习- Sizers

Backtrader 文档学习- Sizers 1.概述 智能仓位 Strategy提供了交易方法&#xff0c;即&#xff1a;buy&#xff0c;sell和close。看一下buy的定义&#xff1a; def buy(self, dataNone,sizeNone, priceNone, plimitNone,exectypeNone, validNone, tradeid0, **kwargs):注意&…

电子电器架构 —— 区域控制器是未来架构的正解吗?

电子电器架构 —— 区域控制器是未来架构的正解吗? 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师(Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶…

猫头虎分享已解决Bug || Go Error: panic: runtime error: index out of range

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

【PTA|期末复习|编程题】数组相关编程题(一)

目录 7-1 乘法口诀数列 (20分) 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 样例解释&#xff1a; 代码 7-2 矩阵列平移(20分) 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; …

JavaScript的聚焦:focus/blur

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;《爱蹦跶的大A阿》 &#x1f525;当前正在更新专栏&#xff1a;《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ ​ ​ ✨ 正文 一、简介 focus 和 blur 事件是 HTML 元素的重要事件&#xff…

4、解构三个重要的Pipeline(SD-Inpainting, ControlNet, AnimateDiff) [代码级手把手解析diffusers库]

上一篇我们解析了所有Pipeline的基类DiffusionPipeline。后续各种各样的pipeline都继承了DiffusionPipeline的模型加载保存等功能,然后再配合各个组件实现各种的结构即可。 事实上,一个Pipeline通常包含了如下模块(from_pretrained函数根据model_index.json文件new了一个Pipe…

还在用findViewById,不来了解下其它方式?

众所周知&#xff0c;都2220年了&#xff0c;findViewById已经是一种非常繁琐的操作&#xff0c;如果要去获取的id数量多&#xff0c;则对开发更加不友好。如果一个页面id过多&#xff0c;经常会有如下场景&#xff1a; TextView title findViewById(R.id.*tv_title*); TextV…

数据结构(2) 线性表

线性表 线性表的定义线性表的基本操作lnitList(&L)DestroyList(&L)Listlnsert(&L,i,e)ListDelete(&L,i,&e)LocateElem(L,e)GetElem(L,i)Length(L)PrintList(L)Empty(L)Tips:引用值 小结 根据数据结构的三要素–逻辑结构、数据的运算、存储结构&#xff0c;…

【教3妹学编程-算法题】使数组异或和等于 K 的最少操作次数

3妹&#xff1a;2哥&#xff0c;新年好鸭~ 2哥 : 新年好&#xff0c;3妹这么早啊 3妹&#xff1a;是啊&#xff0c;新年第一天要起早&#xff0c;这样就可以起早一整年 2哥 :得&#xff0c;我还不了解你&#xff0c;每天晒到日上三竿 3妹&#xff1a;嘿嘿嘿嘿&#xff0c;一年是…

【JMX】JAVA监控的基石

目录 1.概述 2.MBean 2.1.Standard MBean 2.2.Dynamic MBean 2.3.Model Bean 2.4.Dynamic MBean和Model Bean的区别 2.5.MXBean 2.6.Open Bean 3.控制台 1.概述 什么是JMX&#xff0c;首先来看一段对话&#xff1a; Java Management Extensions&#xff08;JMX&#…

人工智能算法:理解其工作原理及其在现实世界中的应用

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已逐渐成为我们生活中不可或缺的一部分。从智能语音助手到自动驾驶汽车&#xff0c;再到医疗诊断系统&#xff0c;人工智能算法正以前所未有的速度改变着我们的世界。本文将带您深入探讨人工智能算法的工作原…
最新文章