目錄
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++中:
-
類型限定符:
const
、volatile
(影響類型屬性)。 -
存儲類說明符:
static
、register
、mutable
(影響存儲方式或生命周期)。 -
restrict
:C語言特性,C++需依賴編譯器擴展。