C/C++面试常见问题——const关键字的作用和用法
首先我们需要一下const关键字的定义,const名叫常量限定符,当const修饰变量时,就是在告诉编译器该变量只可访问不可修改,而编译器对于被const修饰的变量有一个优化,编译器不会专门为其开辟空间,而是将变量名和数值作为一个kv键值对存入到符号表中。
注意:const修饰的变量必须要在定义时初始化

如上,当我们想要通过指针改变a时发现无法改变,这就是因为编译器对其的优化,导致a为存入符号表的一个固定值,而&a和b的地址一样只是编译器想让我们看到的,实际上是取地址时,编译器又开了一块空间存储a的值,并将这个空间地址给b。
通过volatile关键字修饰变量我们可以告诉编译器,该变量无需优化

如上所示
一,const常见用法
1.1 const修饰变量
const int a=10;
int const a=10;
const修饰变量如下,该变量无法直接修改,但是可以通过指针进行修改
1.2 const修饰指针
const修饰指针以*为界限分为常量指针、指针常量,也就是我们经常说的左定值,右定向
常量指针
const在*号左边,指针所指向的值无法改,但是可以改变指针的指向

指针常量
const在*号右边,指针所指向的值可以修改,但是无法更改指针的指向

以及两者共存的情况 ,无法修改指针指向的内容,也无法修改指针的指向

1.3 const修饰类成员变量
const修饰类成员变量,该变量必须要在初始化列表初始化,初始化之后该变量无法在更改,即使是构造函数也无法修改
class example
{
public:example(int a=10):_a(a){//_a = 11;//无法修改,会报错}
private:const int _a;
};
1.4 const修饰类成员函数
const修饰成员函数使用格式如下
class example
{
public:example(int a=10):_a(a){}void Example() const;
private:int _a;
};
实际上const修饰的是Example成员函数隐藏的*this指针,因此其实际修饰格式如下
class example
{
public:example(int a=10):_a(a){}//void Example() const;void Example(const example* this);
private:int _a;
};
因此当const修饰成员函数时,该函数对于对象的成员变量只能读取不能修改
1.5 const修饰函数返回值
const修饰函数返回值,则函数返回值被赋值对象必须也被const所修饰,通常返回值与引用搭配
const int& example();const int a=exampel();//正确
int a=example();//错误
二、const实战常用用法解析
2.1 const修饰函数输入式参数
const修饰输入式参数指的是,当我们函数的某个参数只希望函数内部读取而不能修改,就可以使用const进行修饰
例如上面所示,STL库中的strcmp函数,比较两个字符串是否相等,因此无需对其进行修改,为了保护参数就可以用const进行修饰
2.2 const修饰类成员函数
当类成员函数只需访问类成员变量,如打印成员变量之类,此时就可以用const修饰,防止误改成员变量

如上图STL中的vector容器,重载[]访问数组元素的接口,就有为了保证成员变量不被改变而const修饰成员函数的操作
2.3 const修饰函数返回值

![]()
如上图所示,注意vector中重载[]的第二个接口的返回值const_reference,而该类型实质上是const value_type&,注意这个引用,后面要考。
首先当我们选择引用返回相比于正常返回,中间减少了数据拷贝——临时变量——数据拷贝的过程,有效提升了返回效率。而引用返回也有其弊端,如果用户修改这个返回值,那么就会直接影响容器中对应的值,如果我们不想让用户随意修改容器中的数据又想要高效的引用返回,那么就需要用const修饰返回值
相关文章:
C/C++面试常见问题——const关键字的作用和用法
首先我们需要一下const关键字的定义,const名叫常量限定符,当const修饰变量时,就是在告诉编译器该变量只可访问不可修改,而编译器对于被const修饰的变量有一个优化,编译器不会专门为其开辟空间,而是将变量名…...
Vue3.3指北(四)
Vue3.3指北 1、WebPack - VueCLI1.1、WebPack安装VueCli1.2、vue create 创建项目1.3、项目目录结构介绍 2、ViteVue32.1、认识create-vue2.2、使用create-vue创建项目2.3、项目目录剖析2.4、ESlint代码规范及手动修复2.5、通过eslint插件来实现自动修正 3、VueRouter43.1、单页…...
vue如何使用路由拦截器
在 Vue 中使用路由拦截器需要使用 Vue Router 提供的 beforeEach 方法。beforeEach 方法会在每个路由切换前,对路由进行拦截处理。可以在这个方法中进行一些验证或者权限认证,如果满足条件则继续跳转,否则取消跳转并进行相应处理。 下面是一…...
Docker 深度清除镜像缓存 (overlay2)
Docker 深度清除镜像缓存 (overlay2) 一般情况下,运维清理镜像是通过命令 docker rm i 删除镜像的。但是这条命令不会删除docker build命令产生的缓存文件。 这个时候需要使用 docker system 的系列命令来做相关处理。 docker system --hel…...
刷题笔记(第三天)
1.给定二进制字符串,将其换算成对应的十进制数字 输入:11000000 输出:192 function base10(str) {let sum 0;let a str.split().reverse(); // 个位是第一个元素for (var i 0; i < a.length; i) {suma[i]*Math.pow(2, i);}return sum;…...
Linux常用命令——chown命令
在线Linux命令查询工具 chown 用来变更文件或目录的拥有者或所属群组 补充说明 chown命令改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户D࿰…...
浅谈Docker原理
文章目录 前言命名空间控制组分层存储镜像和容器Docker EngineDocker Registry 前言 Docker 是一种容器化技术,它通过利用 Linux 内核提供的虚拟化技术和隔离机制,实现了更轻量级的应用程序虚拟化方案 命名空间 Docker 使用了 Linux 的命名空间特性&a…...
Rt-Thread 移植5--空闲线程和线程阻塞(KF32)
5.1原因 线程延时是浪费CPU资源,受否可以考虑延时的时候放弃CPU使用权,这样就充分利用了CPU的资源。 如果线程进入阻塞状态,没有其他线程运行,是否可以运行一个空闲线程来做一些内存的清理等系统工作呢:5.2 实现 5.2…...
Web3 治理实践探讨:如何寻找多元化发展路径?
Web3 领域变革正崭露头角,而社区治理开始成为行业热议话题。Web3 项目如何探寻多元化建设的解困路径,究竟是治理模型的精进成为首要问题,还是吸纳更多资金与组织教育培训,让开发者成为项目建设的中坚力量?本期 TinTinW…...
探索Vue 3和Vue 2的区别
目录 响应式系统 性能优化 Composition API TypeScript支持 总结 Vue.js是一款流行的JavaScript框架,用于构建用户界面。Vue 3是Vue.js的最新版本,相较于Vue 2引入了许多重大变化和改进。在本文中,我们将探索Vue 3和Vue 2之间的区别。 …...
中微爱芯74逻辑兼容替代TI/ON/NXP工规品质型号全
这里写自定义目录标题 工业级型号全产品线概述批量应用行业头部客户兼容替代封装对照逻辑参数对比电平转换系列型号对照HC/HCT 系列型号对照AHC/AHCT 系列型号对照LV/LVC 系列型号对照…...
聊一下Word2vec-训练优化篇
Word2vec 涉及到两种优化方式,一种是负采样,一种是层序Softmax 先谈一下负采样,以跳字模型为例。中心词生成背景词可以由两个相互独立事件的联合组成来近似(引自李沐大神的讲解)。 第一个事件是,中心词和…...
Julia元组、字典、集合
文章目录 元组字典集合共性 Julia系列:编程初步🔥数组 作为通用编程语言,除了数组之外,julia实现了元组、字典、集合等数据结构。 元组 与向量类似,也是一维的数据结构,并且对数据类型无要求,…...
EfficientViT:高分辨率密集预测的多尺度线性关注
标题:EfficientViT: Multi-Scale Linear Attention for High-Resolution Dense Prediction 论文:https://arxiv.org/abs/2205.14756 中文版:【读点论文】EfficientViT: Enhanced Linear Attention for High-Resolution Low-Computation将soft…...
每日一道算法题:26. 删除有序数组中的重复项
难度 简单 题目 给你一个 非严格递增排列 的数组 nums ,请你原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为…...
吴恩达《机器学习》2-2->2-4:代价函数
一、代价函数的概念 代价函数是在监督学习中用于评估模型的性能和帮助选择最佳模型参数的重要工具。它表示了模型的预测输出与实际目标值之间的差距,即建模误差。代价函数的目标是找到使建模误差最小化的模型参数。 二、代价函数的理解 训练集数据:假设我…...
软考 系统架构设计师系列知识点之设计模式(6)
接前一篇文章:软考 系统架构设计师系列知识点之设计模式(5) 所属章节: 老版(第一版)教材 第7章. 设计模式 第2节. 设计模式实例 相关试题 1. 设计模式描述了一个出现在特定设计语境中的设计再现问题&…...
use renv with this project create a git repository
目录 1-create a git repository 2-Use renv with this project 今天在使用Rstudio过程中,发现有下面两个新选项(1)create a git repository (2) Use renv with this project. 选中这两个选项后,创建新项目,在项目目…...
摄像头种类繁多,需要各自APP
老外报怨吾APP不能用之后,吾按照提供的图片买了一个。昨天到货以后,心想这下你小子可被我逮住了,非解决你不可…… 吾APP当然不能用。老外声称能用的APP也不能用。又下载了一个,还是不能用。 最后只能老老实实的想办法从Google P…...
Openssl数据安全传输平台010:jasoncpp 0.10.7的编译 - Windows-vs2022 / Ubuntu/ Centos8 -含测试代码
文章目录 0. 代码仓库1 安装1.1 windows 下的安装1.2 Linux 下的安装1.2.1 相关环境配置问题1.2.2 准备安装1.2.2.1 安装scons1.2.2.2 安装jsoncppUbuntu系统下Centos8系统下 2 编译 c 测试文件: json-test.cpp2.1 配置库文件2.2 配置VS2.3 Winsows系统下cpp文件测试…...
Go OAuth2授权码流程:实现Web应用用户认证的终极指南
Go OAuth2授权码流程:实现Web应用用户认证的终极指南 【免费下载链接】oauth2 Go OAuth2 项目地址: https://gitcode.com/gh_mirrors/oa/oauth2 Go OAuth2授权码流程是现代Web应用用户认证的完整解决方案,为开发者提供了安全、标准化的身份验证机…...
3大核心技术深度解析:Windows Defender Control开源项目的架构与实践指南
3大核心技术深度解析:Windows Defender Control开源项目的架构与实践指南 【免费下载链接】defender-control An open-source windows defender manager. Now you can disable windows defender permanently. 项目地址: https://gitcode.com/gh_mirrors/de/defen…...
nli-distilroberta-base实操手册:生产环境Nginx反向代理+HTTPS配置指南
nli-distilroberta-base实操手册:生产环境Nginx反向代理HTTPS配置指南 1. 项目概述 nli-distilroberta-base是一个基于DistilRoBERTa模型的自然语言推理(NLI)Web服务,专门用于判断两个句子之间的逻辑关系。这个轻量级模型保留了RoBERTa-base模型90%的性…...
VisualCppRedist AIO:一站式解决Windows运行库问题的终极方案
VisualCppRedist AIO:一站式解决Windows运行库问题的终极方案 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 问题场景:运行库缺失如何让…...
“AI 辅助数据库优化 - 从慢查询分析到索引自动推荐“
AI 辅助数据库优化 - 从慢查询分析到索引自动推荐 问题场景 数据库优化的常见挑战: 慢查询排查依赖 DBA 经验,门槛高索引创建盲目,有时反而降低性能SQL 改写凭感觉,缺乏系统方法执行计划看不懂,不知道优化方向性能问题…...
5大场景落地指南:企业级语音识别服务从部署到优化全攻略
5大场景落地指南:企业级语音识别服务从部署到优化全攻略 【免费下载链接】whisper-asr-webservice OpenAI Whisper ASR Webservice API 项目地址: https://gitcode.com/gh_mirrors/wh/whisper-asr-webservice 【项目核心价值定位】解决3大语音识别痛点的开源…...
Source Han Serif CN:开源中文字体的技术革命与实践指南
Source Han Serif CN:开源中文字体的技术革命与实践指南 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 价值定位:重新定义专业中文字体标准 在数字设计领域&a…...
Cyber Engine Tweaks:解锁《赛博朋克2077》终极自定义体验的3个关键维度
Cyber Engine Tweaks:解锁《赛博朋克2077》终极自定义体验的3个关键维度 【免费下载链接】CyberEngineTweaks Cyberpunk 2077 tweaks, hacks and scripting framework 项目地址: https://gitcode.com/gh_mirrors/cy/CyberEngineTweaks Cyber Engine Tweaks&a…...
Phi-3-Mini-128K快速原型开发:微信小程序集成AI对话功能
Phi-3-Mini-128K快速原型开发:微信小程序集成AI对话功能 最近在捣鼓一些AI小应用,发现很多开发者都想给自己的小程序加个“智能大脑”,让用户能聊聊天、问问问题。但一提到集成大模型,很多人就觉得门槛高、流程复杂,光…...
5分钟部署大麦抢票助手:告别手动刷票的智能解决方案
5分钟部署大麦抢票助手:告别手动刷票的智能解决方案 【免费下载链接】DamaiHelper 大麦网演唱会演出抢票脚本。 项目地址: https://gitcode.com/gh_mirrors/dama/DamaiHelper 在热门演唱会门票秒光的时代,手动刷新抢票已经成为历史。DamaiHelper大…...
