C++(8):类型限定符

目录

1. const:定义常量

2. volatile:易变性修饰

3. restrict(C++非标准)

4. mutable:突破常量性

5. static:静态存储

6. register(已弃用)

分类修正说明


1. const:定义常量

含义:变量值不可修改,必须初始化。
应用场景:常量、函数参数、返回值、成员函数(表示不修改对象状态)。

const int MAX = 100;
// MAX = 200;  // 错误:无法修改常量void print(const int* ptr) 
{  // ptr指向的值不可修改std::cout << *ptr;
}

2. volatile:易变性修饰

含义:变量可能被外部因素(硬件、多线程)修改,禁止编译器优化。
应用场景:硬件寄存器、多线程共享变量。

volatile bool sensorTriggered = false;// 假设sensorTriggered可能由中断服务程序修改
while (!sensorTriggered) 
{  // 每次循环都从内存读取值// 等待传感器触发
}

3. restrict(C++非标准)

含义:指针是访问数据的唯一方式(C99特性,C++需编译器扩展)。
注意:C++标准不支持,但GCC/Clang支持__restrict

// 使用GCC扩展
void add(int* __restrict a, int* __restrict b, int n) 
{for (int i=0; i<n; i++) a[i] += b[i];  // 编译器可优化无指针重叠
}

4. mutable:突破常量性

含义:允许在const成员函数或对象中修改该成员。
应用场景:缓存、调试计数等。

class Logger{mutable int logCount = 0;  // mutable成员public:void log() const {logCount++;  // 允许在const函数中修改}
};

5. static:静态存储

含义

  • 函数内:变量生命周期为程序全程,作用域仍局部。

  • 类中:成员属于类而非实例。

  • 文件作用域:变量仅在当前文件可见(C++中更推荐匿名命名空间)。

// 函数内的static变量
void counter() 
{static int count = 0;  // 只初始化一次count++;std::cout << count << "\n";
}// 类中的static成员
class MyClass 
{public:static int sharedVar;  // 声明
};
int MyClass::sharedVar = 42;  // 定义// 文件作用域的static变量(C++中可用匿名命名空间替代)
namespace 
{int fileLocalVar = 100;  // 内部链接
}

6. register(已弃用)

含义:建议编译器将变量存入寄存器(现代编译器自动优化,C++17起弃用)。
示例

// 传统用法(实际可能被编译器忽略)
void loop() 
{register int i;  // 建议寄存器存储for (i=0; i<10000; i++){// 频繁操作}
}

分类修正说明

严格来说,C++中:

  • 类型限定符constvolatile(影响类型属性)。

  • 存储类说明符staticregistermutable(影响存储方式或生命周期)。

  • restrict:C语言特性,C++需依赖编译器扩展。

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

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

相关文章

Nginx yum 安装

一、环境准备 一台装有 CentOS 7.9 的虚拟机 二、安装 安装 yum install -y nginx -y&#xff1a;所有的安装选项都选择 yes。 启动 nginx systemctl enable nginx --now enable&#xff1a;设置 nginx 为开机启动。--now&#xff1a;马上启动 nginx。 查看 nginx 服务状态…

【5分钟学Docker】Docker快速使用

目录 1. 概述 2. 基本操作 2.1. 镜像操作 2.2. 容器操作 2.3. 运行操作 2.4. 镜像保存 2.5. 镜像分享 3. 高级操作 4. 挂载 4.1. 目录挂载 4.2. 卷映射 1. 概述 Docker 镜像有镜像名称和TAG 2. 基本操作 2.1. 镜像操作 查看镜像 docker images docker image ls …

5000字总结 HTML5 中的音频和视频,关羽标签、属性、API 和最佳实践

HTML5 音频与视频开发完全指南&#xff1a;标签、属性、API 与最佳实践 一、引言&#xff1a;HTML5 媒体时代的到来 在 HTML5 之前&#xff0c;网页中的音频和视频播放依赖 Flash、Silverlight 等第三方插件&#xff0c;存在兼容性差、性能瓶颈和安全隐患。HTML5 引入的 <…

【C语言】(9)—指针3

文章目录 一、字符指针的深入理解二、数组指针详解三、二维数组传参的本质四、函数指针及其应用五、函数指针数组与转移表 一、字符指针的深入理解 1.1 字符指针的基本使用 字符指针(char*)是指向字符类型数据的指针&#xff0c;它有两种常见的使用方式&#xff1a; // 方式一…

MDK调试技巧

1、自动生成反汇编 fromelf -c -o "$LL.txt" "#L" 解释&#xff1a; 1、fromelf 是 ARM Compiler 工具链中的一个命令行工具&#xff0c;从fromelf这个名字上我们就能看到它是用来处理elf文件的&#xff0c;elf 全称 Executable and Linking Format &…

嵌入式STM32学习——433M无线遥控灯

1.433M无限模块工作原理&#xff1a; 数据发射模块的工作频率为315M&#xff0c;采用声表谐振器SAW稳频&#xff0c;频率稳定度极高&#xff0c;当环境温度在-25~85度之间变化时&#xff0c;频飘仅为3ppm。 接收到信号&#xff0c;接收模块对应针脚输出高电平&#xff0c;有DO…

JDBC工具类的三个版本

一、JDBC连接数据库的7个步骤 1、加载驱动 2、获取连接 3、编写sql 4、获取执行sql的stmt对象 有两种 stmt&#xff08;存在sql注入问题 字符串拼接&#xff09; pstmt&#xff08;预编译可以防止sql注入&#xff09; 5、执行sql 拿到结果集 6、遍历结果集 7、关闭资源…

3.1/Q1,Charls最新文章解读

文章题目&#xff1a;Predictive model for sarcopenia in chronic kidney disease: a nomogram and machine learning approach using CHARLS data DOI&#xff1a;10.3389/fmed.2025.1546988 中文标题&#xff1a;慢性肾病肌肉减少症的预测模型&#xff1a;使用 CHARLS 数据的…

DEEPPOLAR:通过深度学习发明非线性大核极坐标码(2)

目录 2.问题的提出和背景 2.1 信道编码 2.2.极化码 极坐标编码 极坐标解码 原文&#xff1a;《DEEPPOLAR: Inventing Nonlinear Large-Kernel Polar Codes via Deep Learning》 2.问题的提出和背景 2.1 信道编码 信道编码是一种为传输添加冗余的技术&#xff0c;使其对…

手机当电脑播放器 soundwire

soundwire server免费下载_soundwire serverPC下载_3DM软件 win11可用延迟1秒 安卓端音频缓冲区大小改成8k延迟就没那么夸张了 我用audiorelay连上了没声音

LVGL中的事件

文章目录 &#x1f9f1; 一、什么是 LVGL 事件&#xff1f;&#x1f3af; 二、事件回调的注册参数解释&#xff1a;示例&#xff1a; &#x1f4da; 三、常见事件类型&#xff08;lv_event_code_t&#xff09;✅ 1. 输入类事件&#xff08;用户交互&#xff09;✅ 2. 组件状态类…

警惕C#版本差异多线程中的foreach陷阱

警惕C#版本差异多线程中的foreach陷阱​ 同样的代码,不同的结果闭包捕获的“时间差”问题绕过闭包陷阱的三种方法Lambda立即捕获(代码简洁)显式传递参数(兼容性最佳)使用Parallel.ForEach(官方推荐)注意事项:版本兼容性指南警惕多线程中的foreach陷阱:C#版本差异引发的…

mac u盘重装mac10.15Catalina系统

我的电脑提mac2017的air 重装过程 (文件夹中间有空格时为 Install\ macOS\ Catalina 才行) &#xff08;有需要的&#xff0c;最好做一下备份&#xff0c;有些东西可以及时找到配置和文件之类的&#xff0c; u盘制作是在mac电脑上操作的) 一、先下载系统镜像文件或自行到官方…

说说es配置项的动态静态之分和集群配置更新API

这天因为某件工作来到了es官网某个参数配置相关的页面&#xff0c;注意到了下图圆圈里的“Dynamic”&#xff1a; 链接&#xff1a;https://www.elastic.co/guide/en/elasticsearch/reference/8.1/modules-cluster.html#misc-cluster-settings 显然这是对配置项的一个描述&am…

2025软考【系统架构设计师】:两周极限冲刺攻略(附知识点解析+答题技巧)

距离2025上半年“系统架构设计师”考试已经只剩最后两周了&#xff0c;还没有准备好的小伙伴赶紧行动起来。为了帮助大家更好的冲刺学习&#xff0c;特此提供一份考前冲刺攻略。本指南包括考情分析、答题技巧、注意事项三个部分&#xff0c;可以参考此指南进行最后的复习要领&a…

web animation API 锋利的css动画控制器 (更新中)

什么是web animation api 以及为什么要使用web animation api&#xff1f; web animation API 是web页面中控制DOM元素动画效果的javascript原生API。 它能够逐个关键帧控制动画效果&#xff0c;具有Timeline 机制‌能通过javascript来实现动画的暂停&#xff0c;播放&#x…

Linux基础io知识

理解 "文件" 狭义理解 文件在磁盘里 磁盘是永久性存储介质&#xff0c;因此文件在磁盘上的存储是永久性的 磁盘是外设&#xff08;即是输出设备也是输入设备&#xff09; 磁盘上的文件 本质是对文件的所有操作&#xff0c;都是对外设的输入和输出 简称 IO 广义理解…

视频编解码学习三之显示器续

一、现在主流的显示器是LCD显示器吗&#xff1f; 是的&#xff0c;现在主流的显示器仍然是 LCD&#xff08;液晶显示器&#xff0c;Liquid Crystal Display&#xff09;&#xff0c;但它已经细分为多种技术类型&#xff0c;并和其他显示技术&#xff08;如OLED&#xff09;形成…

[测试]并发模拟工具Apache Bench 进行AB压力测试

下载(windows) https://www.apachelounge.com/download/ 下载后解压&#xff0c;解压后进入bin目录&#xff0c;打开CMD&#xff0c;即可使用 命令 ab.exe -n 请求总数 -c 并发数 http://网站/ 比如ab.exe -n 1000 -c 100 http://127.0.0.1:5555/ 看不懂的话直接把结果让AI分析…

LeetCode 热题 100 138. 随机链表的复制

LeetCode 热题 100 | 138. 随机链表的复制 大家好&#xff0c;今天我们来解决一道经典的链表问题——随机链表的复制。这道题在 LeetCode 上被标记为中等难度&#xff0c;要求深拷贝一个带有随机指针的链表。 问题描述 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额…