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
英文地址,請注明出處:http://en.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;每個節點包含一個額…