# 1. `static`(静态) (1) 全局作用域 - **作用**:将变量/函数的作用域限制在当前文件(内部链接)。 - **示例**: ```cpp static int globalVar = 42; // 仅当前文件可见 static void helper() {} // 仅当前文件可见 ``` (2) 局部变量 - **作用**:变量生命周期延长至程序结束,且只初始化一次。 - **示例**: ```cpp void counter() { static int count = 0; // 保留上次调用的值 count++; } ``` --- (3) 类成员 - **静态成员变量**: ```cpp class MyClass { public: static int sharedVar; // 所有对象共享同一实例 }; int MyClass::sharedVar = 0; // 必须在类外定义 ``` - **静态成员函数**: ```cpp class MyClass { public: static void print() { /* 只能访问静态成员 */ } }; ``` --- # 2. `const`(常量) (1) 变量 - **作用**:定义不可修改的值(常量)。 - **示例**: ```cpp const int MAX_SIZE = 100; ``` (2) 指针 - **指向常量的指针**: ```cpp const int* ptr = &var; // *ptr 不可修改 ``` - **常量指针**: ```cpp int* const ptr = &var; // ptr 不可修改 ``` --- (3) 成员函数 - **作用**:承诺不修改对象状态(可访问 `const` 和 `mutable` 成员)。 - **示例**: ```cpp class MyClass { int value; public: int getValue() const { return value; } // 不会修改成员 }; ``` --- # 3. `mutable`(可变) - **作用**:允许在 `const` 成员函数中修改成员变量。 - **示例**: ```cpp class MyClass { mutable int cache; public: void updateCache() const { cache++; } // 合法 }; ``` --- # 4. `volatile`(易变) - **作用**:防止编译器优化,告知变量可能被外部修改(如硬件寄存器)。 - **示例**: ```cpp volatile bool flag = false; // 每次访问都从内存读取 ``` --- # 5. `extern`(外部链接) - **作用**: - 声明变量/函数在其他文件中定义(用于跨文件访问)。 - 配合 `const` 时,为常量提供外部链接。 - **示例**: ```cpp extern int globalVar; // 声明(定义在其他文件) extern const int PI; // 声明外部常量 ``` --- # 6. `thread_local`(C++11 起) - **作用**:变量在每个线程中有独立实例(线程局部存储)。 - **示例**: ```cpp thread_local int threadID; // 每个线程独立副本 ``` --- # 7. `constexpr`(C++11 起) - **作用**:要求值/函数在编译时计算(常量表达式)。 - **示例**: ```cpp constexpr int square(int x) { return x * x; } constexpr int val = square(10); // 编译时计算 ``` --- # 8. `friend`(友元) - **作用**:允许其他类或函数访问当前类的私有成员。 - **示例**: ```cpp class MyClass { int secret; friend void friendFunc(); // 友元函数可访问 secret }; ``` --- # 关键区别总结 |修饰符|主要用途| |---|---| |`static`|控制作用域、延长生命周期、共享类成员| |`const`|定义常量/不可修改性,保护对象状态| |`mutable`|突破`const`成员函数的限制| |`volatile`|防止编译器优化,用于硬件/多线程场景| |`extern`|声明外部定义的变量/函数| |`thread_local`|线程局部存储| |`constexpr`|强制编译时常量| |`friend`|授权访问私有成员| 理解这些修饰符的上下文依赖性是掌握 C++ 的关键!