新闻详情

新闻详情

首页 / 资讯中心 / 详情

C++ const 相关的面试八股

发布时间:2026/9/26 2:26:25来源:尧图网络
C++ const 相关的面试八股
1const的本质与承诺const关键字的核心是做出一个“承诺”承诺其所修饰的对象变量、指针、引用、成员函数等的“不变性”。它告诉编译器和代码的阅读者“这个值/这个对象的状态在这里不会被改变。”编译器会强制检查这个承诺违反则报错。这增强了代码的安全性、可读性和可维护性。2const的常见用法“八股”2.1常量变量作用定义一个编译期或运行期的常量值初始化后不可修改。与#define宏的区别const常量有类型检查更安全。const常量在编译、链接时遵循作用域规则而宏是简单的文本替换无作用域。const常量从汇编角度看通常会被编译器优化。constintMAX_SIZE100;// 编译期常量通常constintvaluegetValue();// 运行期常量// MAX_SIZE 200; // 错误不可修改2.2const与指针这是经典的面试考点关键看const修饰的是谁。常量指针指针是常量inta10,b20;int*constpa;// p 本身是常量指向不能变// p b; // 错误p 的指向不可修改*p30;// 正确p 指向的值a可以被修改口诀const在*右边指针本身不可变。指向常量的指针指向的数据是常量inta10,b20;constint*pa;// 等价于 int const* p// *p 30; // 错误不能通过 p 修改 apb;// 正确p 的指向可以改变口诀const在*左边指向的数据不可变通过该指针。指向常量的常量指针两者都不可变inta10;constint*constpa;// p xxx; // 错误// *p 20; // 错误2.3const与引用常量引用不能通过该引用修改所绑定的对象。这是最常用的const引用形式常用于函数参数避免拷贝同时保证不修改实参。intx5;constintrefx;// ref 是 x 的常量引用// ref 10; // 错误x10;// 正确但 ref 看到的值也变成了 10关键特性常量引用可以绑定到右值临时对象、字面量这是普通引用做不到的。constintr42;// 合法// int r 42; // 非法voidfunc(conststd::stringstr);// 可以接收字符串字面量func(“hello”)2.4const成员函数这是类设计的核心用于表明该成员函数不会修改对象的成员变量除非成员被mutable修饰。语法在成员函数声明的参数列表后加上const。作用安全编译器保证函数内不会修改非mutable的成员。设计意图告诉使用者这是一个“只读”操作。关键作用const对象只能调用const成员函数。这使得程序能正确地对常量对象进行操作。classMyClass{public:intgetValue()const{// const 成员函数// value_ 10; // 错误不能修改成员变量returnvalue_;}voidsetValue(intv){// 非 const 成员函数value_v;}private:intvalue_;mutableintcache_;// mutable 成员即使在 const 函数中也可被修改};constMyClass obj;intxobj.getValue();// 正确const 对象调用 const 函数// obj.setValue(5); // 错误const 对象不能调用非 const 函数重载依据const可以作为成员函数重载的依据。编译器根据调用对象的const性来选择版本。classText{charoperatorstd::size_t pos{returntext[pos];}// 用于普通对象constcharoperatorstd::size_t posconst{returntext[pos];}// 用于 const 对象};2.5const与函数参数和返回值参数使用const引用const T传递不希望被修改的大型对象效率高且安全。使用const指针const T*同理。返回值返回const值如const T对于内置类型意义不大对于类对象可以防止返回值被用作左值如(a*b) c;这种无意义的操作但在 C11 后的移动语义下较少用。返回const引用/指针常见于返回成员变量的引用/指针并希望调用者不能通过它修改对象内部状态。但要警惕返回指向局部对象的引用/指针2.6顶层const与底层const这是 C 标准中的精确概念有助于理解复杂的类型声明。顶层const表示对象本身是常量。适用于任意数据类型。inta0;int*constp1a;// p1 本身是 const顶层constintb0;// b 本身是 const顶层底层const表示指针或引用所指向的对象是常量。constint*p2a;// p2 指向的对象是 const底层constintra;// r 指向的对象是 const底层constint*constp3a;// 左边底层 const右边顶层 const在拷贝时的区别顶层const不影响拷贝因为拷出和拷入的对象是独立的。进行拷贝时拷入和拷出的对象必须具有相同的底层const资格或者能从非const转换为const反之则不行。constintc10;intdc;// 正确顶层 const 被忽略constint*p4a;// 底层 constint*p5p4;// 错误p4 有底层 constp5 没有constint*p6p4;// 正确两者都有相同的底层 const3 进阶与相关考点mutable关键字用于修饰类的成员变量表示它在const成员函数中也可以被修改常用于缓存、互斥锁等场景。const_cast运算符用于移除对象的const或volatile属性。极其危险除非你确切知道被转换的原始对象本身不是常量例如向接收非const指针的旧式 C 接口传递数据时。constexpr(C11)比const更强大用于定义编译期常量并要求常量表达式能在编译时求值。可用于变量、函数、构造函数等。constexpr函数如果传入编译期常量则结果也是编译期常量。与volatile的区别const告诉编译器“不要变”volatile告诉编译器“可能会意外改变”防止优化常用于硬件映射内存。4 面试回答思路回答时可以按层次展开定性const是承诺不变性由编译器保证。分场景从变量 - 指针/引用 - 函数参数 - 成员函数 - 返回值逐一说明。点出关键指针的const在*左/右的区别。常量引用的绑定特性。const成员函数的双重意义不修改对象、使const对象可调用。顶层/底层const的概念。提及周边简单提一下mutable、const_cast和constexpr的作用与注意事项。掌握这些就掌握了 Cconst的绝大部分“八股”内容。理解其背后的“承诺与保证”思想比死记硬背语法更重要。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Bangumi 的完整发布流程:从本地构建到商店上架 2026/9/26 3:02:18

Bangumi 的完整发布流程:从本地构建到商店上架

Bangumi 的完整发布流程:从本地构建到商店上架 【免费下载链接】Bangumi :electron: An unofficial https://bgm.tv ui first app client for Android and iOS, built with React Native. 一个无广告、以爱好为驱动、不以盈利为目的、专门做 ACG 的类似豆瓣的追番记录&#xff…

阅读更多 →
DeepSeek Harness 接入 Command Code API 全流程:Node 环境配置与多智能体代码执行实战 2026/9/26 3:02:18

DeepSeek Harness 接入 Command Code API 全流程:Node 环境配置与多智能体代码执行实战

1. 为什么要在 DeepSeek Harness 里接入 Command Code APIDeepSeek Harness(后面统一简称 DSH)这两年在本地智能体编排圈子里热度一直不低,尤其是做多智能体协作、本地模型调度、插件化工作流的那批人,几乎人手一套。但真正把 DSH…

阅读更多 →
DBeaver连接人大金仓KingbaseES V8实战指南:驱动匹配、SSL配置与元数据优化 2026/9/26 3:02:18

DBeaver连接人大金仓KingbaseES V8实战指南:驱动匹配、SSL配置与元数据优化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
BERT中文情感分类实战:从原理到微调完整指南 2026/9/26 3:02:18

BERT中文情感分类实战:从原理到微调完整指南

简介:基于BERT模型的中文文本情感分类毕业设计项目,完整提供Python源码与操作过程,面向计算机相关专业正在完成大作业、毕业设计或需要项目实战练习的学生。项目经导师指导并审定,评审得分98分,所有源码均在本地编译调…

阅读更多 →
abogen 免费三步:把电子书变成随身有声书 2026/9/26 3:02:18

abogen 免费三步:把电子书变成随身有声书

abogen 免费三步:把电子书变成随身有声书 【免费下载链接】abogen Generate audiobooks from EPUBs, PDFs and text with synchronized captions. 项目地址: https://gitcode.com/GitHub_Trending/ab/abogen abogen 是一款开源免费的本地有声书生成工具&…

阅读更多 →
微信在线AI客服系统全解析:PHP+大模型API落地实战 2026/9/26 3:02:11

微信在线AI客服系统全解析:PHP+大模型API落地实战

简介:一套基于PHP开发的微信在线AI客服系统源码,面向需要快速搭建724小时智能客服平台的中小企业、开发者与运维人员。系统原生对接企业微信,既能进行文本对话、图片分析和视频分析,也内置对话管理、人工转接、咨询提醒等功能&…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉