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.hqwc.cn/news/465640.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++求三个数中最大数

#include<iostream> using namespace std; int main() { int a,b,c; cout<<"请输入三个数字"<<endl;//end后面为小写的L cin>>a>>b>>c; if(a>b&&a>c) cout<<"最大数为a:"<<a<<e…

谷粒商城【成神路】-【6】——商品维护

目录 &#x1f9c2;1.发布商品 &#x1f953;2.获取分类关联品牌 &#x1f32d;3.获取分类下所有分组和关联属性 &#x1f37f;4.商品保存功能 &#x1f9c8;5.sup检索 &#x1f95e;6.sku检索 1.发布商品 获取用户系统等级~&#xff0c;前面生成了后端代码&#xff…

C#封装类并因此设计一个简易计算器

目录 一、涉及到的知识点 1.封装 2. 封装性的使用范围 二、实例 1.源码 2.生成效果 一、涉及到的知识点 1.封装 面向对象编程中&#xff0c;大多数都是以类作为数据封装的基本单位。类将数据和操作数据的方法结合成一个单位。设计类时&#xff0c;不希望直接存取类中的数…

windows配置开机自启动软件或脚本

文章目录 windows配置开机自启动软件或脚本配置自启动目录开机运行的脚本调试开机自启动脚本配置守护进程(包装成自启动服务)使用任务计划程序FAQ 开机自动运行脚本示例 windows配置开机自启动软件或脚本 配置自启动目录 在Windows中添加开机自动运行的软件&#xff0c;可以按…

游泳可以戴的耳机有哪些,游泳耳机哪个牌子好性价比高

在游泳训练中&#xff0c;尤其是在进行长距离游泳、控制节奏和进行长时间游泳燃脂时&#xff0c;很容易感到单调乏味。为了帮助自己完成每一个来回&#xff0c;许多游泳运动员除了依赖能量棒和功能饮料外&#xff0c;还会选择通过音乐提高注意力和兴奋度。研究表明&#xff0c;…

Linux操作系统基础(十一):RPM软件包管理器

文章目录 RPM软件包管理器 一、rpm包的卸载 二、rpm包的安装 RPM软件包管理器 rpm&#xff08;英文全拼&#xff1a;redhat package manager&#xff09; 原本是 Red Hat Linux 发行版专门用来管理 Linux 各项软件包的程序&#xff0c;由于它遵循GPL规则且功能强大方便&…

Netty Review - NioEventLoopGroup源码解析

文章目录 概述类继承关系源码分析小结 概述 EventLoopGroup bossGroup new NioEventLoopGroup(1); EventLoopGroup workerGroup new NioEventLoopGroup();这段代码是在使用Netty框架时常见的用法&#xff0c;用于创建两个不同的EventLoopGroup实例&#xff0c;一个用于处理连…

LeetCode.145. 二叉树的后序遍历

题目 145. 二叉树的后序遍历 分析 上篇文章我们讲了前序遍历&#xff0c;这道题目是后序遍历。 首先要知道二叉树的后序遍历是什么&#xff1f;【左 右 根】 然后利用递归的思想&#xff0c;就可以得到这道题的答案&#xff0c;任何的递归都可以采用 栈 的结构来实现&#…

华为问界M9:全方位自动驾驶技术解决方案

华为问界M9的自动驾驶技术采用了多种方法来提高驾驶的便利性和安全性。以下是一些关键技术&#xff1a; 智能感知系统&#xff1a;问界M9配备了先进的传感器&#xff0c;包括高清摄像头、毫米波雷达、超声波雷达等&#xff0c;这些传感器可以实时监测车辆周围的环境&#xff0…

Java 使用 Map 集合统计投票人数

Java 使用 Map 集合统计投票人数 package com.zhong.mapdemo.map;import javax.swing.plaf.synth.SynthOptionPaneUI; import java.util.ArrayList; import java.util.HashMap; import java.util.Map;/*** ClassName : MapCountPeopleNumber* Description : 使用 map 统计投票人…

aardio 编辑GUI界面,调用 python 脚本示例

aardio 中调用 python 的方法有两种&#xff0c;py3 和 process.python 模块 py3 模块&#xff1a;如果经常要拿到python返回的值或从aardio中传数据给python去处理&#xff0c;aardio和python的交互比较多的话&#xff0c;可以考虑使用py3模块&#xff0c;缺点是&#xff1a;p…

24个已知403绕过方法的利用脚本

介绍 一个简单的脚本&#xff0c;仅供自用&#xff0c;用于绕过 403 在curl的帮助下使用24个已知的403绕过方法 它还可用于比较各种条件下的响应&#xff0c;如下图所示 用法 ./bypass-403.sh https://example.com admin ./bypass-403.sh website-here path-here 安装 git …