当前位置: 首页 > news >正文

C++面试八股文:static和const的关键字有哪些用法?

100编程书屋_孔夫子旧书网

某日二师兄参加XXX科技公司的C++工程师开发岗位第7面:

面试官:C++中,staticconst的关键字有哪些用法?

二师兄:satic关键字主要用在以下三个方面:1.用在全局作用域,修饰的变量或者函数为静态的,限制在本文件内使用。2.方法内修饰修饰静态局部变量,在第一次访问的时候初始化。3.内类修饰成员函数和成员变量,此函数或变量由类持有,而非类的对象持有。

二师兄:const关键字主要也有三个用途:1.修饰函数参数,则在函数内部不可以修改此参数。2.修饰类的成员方法,表面此方法不会更改类对象的任何数据。3.修饰变量,表明变量不可以被修该。

面试官:现在两个指针,一个是 const int*,另一个是int * const,两者有什么区别?

二师兄:这要要看const* 的位置,const在前称为常量指针,const在后称为指针常量。常量指针的指针部分可变,指针指向的内容不可变。指针常量则相反,指针指向的内容可变,指针不可变。

面试官:嗯,那么你知道顶层const和底层const吗?

二师兄:额。。。不知道。。。

面试官:知道constexpr关键字的作用吗?

二师兄:了解一些。constexpr关键字修饰的变量具有编译器求值的功能。修饰的函数是否在编译器求值要取决于传入的参数是不是编译器确定的,这属于元编程的范畴。

面试官:嗯,那你知道constevalconstinit这两个关键字的作用吗?

二师兄:额。。。了解过一些,忘记了。

面试官:好的,回去等通知吧。

让我们来复盘一下今日二师兄的表现:

const在前称为常量指针,const在后称为指针常量。

这里的表述仁者见仁智者见智。但是在大名鼎鼎的《C++ Primer Edition 5》中文版中,const int* 被称为指向常量的指针,而int* const则被称为常量指针。这种表述更容易理解两种指针的差异。

你知道顶层const和底层const吗?

这里的顶层const和底层const概念主要是为了区分const修饰的是变量本身还是变量指向的内容。

int i = 42;
const int ci = 42;//顶层const
const int* pi = &i; //磁层const,因为const修饰的是i所在的地址,不能通过pi去修改i,但是可以修改pi
int* const pi2 = &i;//顶层const,因为pi2无法修改
const int& ri = i;	//底层const,不能通过ri修改i

在传递参数时,顶层const可以被忽略,而底层const不能被忽略。

你知道constevalconstinit这两个关键字的作用吗?

还记得constexpr是否在编译时求值要取决于传入的参数吗?如果传入的参数是编译时确定的,constexpr函数就会在编译时求值,反之则会在运行时求值。

constexpr int add(int a, int b)
{return a+b;
}constexpr int sum1 = add(1,2);	//编译时求值int a = 1, b = 2;
int sum2 = add(a,b);	//运行时求值

当使用consteval修饰函数和变量时,如果不能在编译时求值,则编译错误。

consteval int add(int a, int b)
{return a+b;
}
constexpr int sum1 = add(1,2);	//编译通过,在编译时求值
int a = 1, b = 2;
int sum2 = add(a,b);	//编译失败

constinit关键字用于声明一个变量为常量初始化变量。使用constinit可以保证静态变量的初始化顺序和线程安全性,从而避免竞争条件的发生。需要注意的是,constinit关键字只能用于静态变量的初始化,不能用于动态变量的初始化。

需要注意的是,consteval和constinit关键字是C++20引入的, 小伙伴们可以在编译时加入-std=c++20尝试使用这两个关键字。

好了,今日份面试到这里就结束了,小伙伴们,对于今天二师兄的面试,能打几分呢?

相关文章:

C++面试八股文:static和const的关键字有哪些用法?

100编程书屋_孔夫子旧书网 某日二师兄参加XXX科技公司的C工程师开发岗位第7面: 面试官:C中,static和const的关键字有哪些用法? 二师兄:satic关键字主要用在以下三个方面:1.用在全局作用域,修饰的变量或者…...

Qt飞机大战小游戏

Gitee地址 :plane-game: 基于Qt的飞机大战小游戏 GitHub地址: https://github.com/a-mo-xi-wei/plane-game...

Flarum 安装和使用教程

随着开源社区的日益繁荣,人们对社区品质的要求也越来越高。传统的 BBS 论坛模式已经难以满足现代用户对美观、便捷、互动性的需求。搭建一个现代化的高品质社区,成为许多网站管理者的迫切需求和共同挑战。 今天就给大家安利一款现代化的、优雅的开源论坛…...

Java老人护理上门服务类型系统小程序APP源码

🌸 老人上门护理服务系统:温暖与专业并存 🌸 一、🏠 走进老人上门护理服务系统 随着社会的快速发展,我们越来越关注老年人的生活质量。老人上门护理服务系统应运而生,它结合了现代科技与人性化服务&#…...

Spring Boot整合Knife4j-3.0.3

文章目录 Spring Boot整合Knife4j-3.0.31. 引言2. 快捷的解决方案2.1 修改knife4j的依赖2.2 application.yml增加配置3.3 SwaggerConfig配置如下 Spring Boot整合Knife4j-3.0.3 1. 引言 前面我写过一篇关于整合knife4j的文档 Spring Boot整合Knife4j-2.0.7 最近我引入redissi…...

使用R语言生成CDISC SDTM.AE domain

写在前面 - 使用的是Rstudio - 其实R已经有生成sdtm相关的package,以下代码仅作为练习R语言的语法,不是高效生成sdtm的方法 - 代码中没有解决的问题包括:EPOCH相关的逻辑没有考虑partial date的情况;在使用arrange() function做…...

怎么防止源代码泄露?9种方法教会你!

怎么防止源代码泄露?首先要了解员工可以通过哪些方式将源代码传输出去! 物理方法: — 网线直连,即把网线从墙上插头拔下来,然后和一个非受控电脑直连; — winPE启动,通过光盘或U盘的winPE启动,甚…...

原生JS如何实现可配置DM码

原生JS如何实现可配置DM码 一、 DM码简介 1、 Data Matrix码 Data Matrix码是一种二维条形码,简称DM码,由美国公司International Data Matrix, Inc.(I.D. Matrix)在1994年发明,Data Matrix码中的行数和列数随二维码中存储的信息量而增加,信息限值是2335个字母数字字符…...

【Python】Python开发面试题库:综合考察面试者能力

文章目录 Python开发面试题库:综合考察面试者能力1. 基础语法与数据类型问题1:变量与数据类型问题2:列表与字典操作问题3:字符串操作问题4:元组解包问题5:集合操作问题6:基本运算问题7&#xff…...

大语言模型的sft

https://zhuanlan.zhihu.com/p/692892489https://zhuanlan.zhihu.com/p/692892489https://zhuanlan.zhihu.com/p/679450872https://zhuanlan.zhihu.com/p/6794508721.常...

Astar路径规划算法复现-python实现

# -*- coding: utf-8 -*- """ Created on Fri May 24 09:04:23 2024"""import os import sys import math import heapq import matplotlib.pyplot as plt import time 传统A*算法 class Astar:AStar set the cost heuristics as the priorityA…...

低-零功率技术在军事中的应用

“低-零功率”概念最先由美国国防部提出,主要是针对诸如俄罗斯等大国的远程传感器,帮助美军破除“灰色地带挑衅”的威胁。由于“灰色地带”冲突仅依托小规模军事力量,其强度维持在不足以引发美国及其盟国进行直接干预的程度,因此&…...

【培训】企业档案管理专题(私货)

导读:通过该专题培训,可以系统了解企业档案管理是什么、为什么、怎么做。尤其是对档案的价值认知,如何构建与新质生产力发展相适应的企业档案工作体系将有力支撑企业新质生产力的发展,为企业高质量发展贡献档案力量,提…...

某国资集团数据治理落地,点燃高质量发展“数字引擎”

​某国有资产经营控股集团为快速提升集团的内控管理能力和业务经营能力,以数字化促进企业转型的信息化建设势在必行。集团携手亿信华辰开启数据治理项目,在数据方面成功解决“哪里来、怎么盘、怎么管、怎么用”的问题,不断推动企业数字化转型…...

2024.06.12【读书笔记】丨生物信息学与功能基因组学(第十四章 细菌和古细菌基因组 第二部分)【AI测试版】

读书笔记:《生物信息学与功能基因组学》第十四章 - 第二部分 摘要 第二部分深入讨论了基于不同标准的细菌和古细菌的分类方法,包括形态学、基因组大小和排列、生活方式以及与人类疾病的关系。此外,还探讨了基于核糖体RNA序列的分类方法&…...

企业数据API接口大全

一、工商信息 (1)精确获取企业唯一标识 根据企业名称、注册号或统一社会信用代码,获取企业唯一标识 (2)企业模糊查询 关键字名称模糊搜索匹配企业 (3)企业详情 根据企业唯一标识、企业名称…...

【HTML】格式化文本 pre 标签

文章目录 <pre> 元素中的文本以等宽字体显示&#xff0c;文本保留空格和换行符。 <pre> 元素支持 HTML 中的全局属性和事件属性。 示例&#xff1a; <pre> pre 元素中的文本 以等宽字体显示&#xff0c; 并且同时保留 空格 和 换行符。 </pre&…...

力扣每日一题(2024-06-13)2813. 子序列最大优雅度

基于官方题解&#xff0c;进行补充说明 给你一个长度为 n 的二维整数数组 items 和一个整数 k 。 items[i] [profiti, categoryi]&#xff0c;其中 profiti 和 categoryi 分别表示第 i 个项目的利润和类别。 现定义 items 的 子序列 的 优雅度 可以用 total_profit distinct_…...

MySQL -- 优化

1. 查询优化 使用索引 示例&#xff1a;有一个包含数百万用户的表&#xff0c;名为 users&#xff0c;常见的查询是通过 email 字段查找用户。 CREATE INDEX idx_email ON users(email);通过创建索引 idx_email&#xff0c;SELECT * FROM users WHERE email exampleexample…...

学会python——密码校验(python实例三)

目录 1、认识Python 2、环境与工具 2.1 python环境 2.2 pycharm编译 3、纠正密码输入的格式问题 3.1 代码构思 3.2 代码示例 3.3 运行结果 4、总结 1、认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可…...

洛谷 P1833:樱花 ← 混合背包(01 + 完全 + 多重)

【题目来源】 https://www.luogu.com.cn/problem/P1833 【题目描述】 爱与愁大神后院里种了 n 棵樱花树&#xff0c;每棵都有美学值 Ci(0<Ci≤200)。爱与愁大神在每天上学前都会来赏花。爱与愁大神可是生物学霸&#xff0c;他懂得如何欣赏樱花&#xff1a;一种樱花树看一遍…...

别再只看灰度图了!用功率谱给你的AI生成图像质量把把脉

功率谱分析&#xff1a;AI生成图像质量评估的隐藏利器 当我们在评估AI生成的图像时&#xff0c;常常会陷入主观判断的陷阱——肉眼观察虽然直观&#xff0c;但缺乏量化标准。而功率谱分析这一源自信号处理的技术&#xff0c;正悄然成为AI图像质量评估领域的一把精准尺子。不同于…...

从智慧灯杆到无人驾驶:如何用Raspberry Pi 4和Arduino搭建微型智慧城市实验平台

从智慧灯杆到无人驾驶&#xff1a;如何用Raspberry Pi 4和Arduino搭建微型智慧城市实验平台 在创客文化和高校工程教育中&#xff0c;低成本硬件的创新应用正掀起一场微型智慧城市实验的革命。只需一块树莓派主板、几个传感器和开源软件&#xff0c;就能在桌面上复现价值数百万…...

3步打造极速安全系统:AtlasOS开源优化方案全解析

3步打造极速安全系统&#xff1a;AtlasOS开源优化方案全解析 【免费下载链接】Atlas &#x1f680; An open and lightweight modification to Windows, designed to optimize performance, privacy and security. 项目地址: https://gitcode.com/GitHub_Trending/atlas1/Atl…...

苹果内购订阅的“时间陷阱”:如何正确处理UTC与东八区的时间转换(附Java代码)

苹果订阅时间戳的时区陷阱&#xff1a;UTC与东八区转换的实战指南 1. 为什么时间戳处理如此重要&#xff1f; 在苹果应用内购&#xff08;IAP&#xff09;订阅系统中&#xff0c;时间戳处理看似简单&#xff0c;实则暗藏玄机。许多开发者都曾踩过这样的坑&#xff1a;用户明明购…...

革命性AI身份系统:Second Me如何重新定义数字分身技术

革命性AI身份系统&#xff1a;Second Me如何重新定义数字分身技术 【免费下载链接】Second-Me 开源 AI 身份系统&#xff0c;通过本地训练和部署&#xff0c;模仿用户思维和学习风格&#xff0c;创建专属AI替身&#xff0c;保护隐私安全。 项目地址: https://gitcode.com/gh_…...

深入剖析大数据领域数据分片的优缺点

深入剖析大数据领域数据分片的优缺点 关键词&#xff1a;数据分片、大数据架构、分片策略、水平扩展、分布式系统 摘要&#xff1a;在大数据时代&#xff0c;单台服务器已无法承载海量数据的存储与计算需求&#xff0c;数据分片&#xff08;Sharding&#xff09;作为分布式系统…...

告别混乱!用CANoe的arxml数据库高效管理车载网络信号(附Signal/PDU/Frame创建全流程)

告别混乱&#xff01;用CANoe的arxml数据库高效管理车载网络信号&#xff08;附Signal/PDU/Frame创建全流程&#xff09; 当车载网络从简单的CAN总线发展到包含FlexRay、以太网等多协议混合架构时&#xff0c;工程师们面临的信号管理复杂度呈指数级增长。一个典型的域控制器项目…...

ARM嵌入式开发:寄存器操作与函数指针实战

## 1. 嵌入式开发中的寄存器操作技巧### 1.1 寄存器地址访问方法 在ARM架构嵌入式开发中&#xff0c;直接操作硬件寄存器是底层开发的核心技能。通过C语言访问特定内存地址的标准做法是使用指针类型转换&#xff1a;c #define GSTATUS1 (*(volatile unsigned int *)0x560000B0)…...

s2-pro GPU算力适配实战:显存优化部署让语音合成延迟降低40%

s2-pro GPU算力适配实战&#xff1a;显存优化部署让语音合成延迟降低40% 1. 专业语音合成新选择 s2-pro是Fish Audio开源的专业级语音合成模型镜像&#xff0c;它让高质量的文本转语音变得触手可及。与普通语音合成工具不同&#xff0c;s2-pro支持通过参考音频复用音色&#…...