一、存储类运算符
auto(自动存储类,但在现代C++中,它通常用于自动类型推导)
register(建议编译器将变量存储在寄存器中,但现代编译器通常忽略此关键字)
static(静态存储类,用于局部变量、全局变量、函数和类成员)
extern(用于声明在其他地方定义的变量或函数)
mutable(允许在const类的非常量成员函数中修改成员变量)
thread_local(C++11引入,用于声明变量的生命周期与线程相同)
二、类型修饰符
const(常量,不可修改)
volatile(告诉编译器不要优化对该变量的访问,因为它可能在程序外部被修改)
signed 和 unsigned(用于整数类型,表示数值的符号属性)
long 和 short(用于调整整数类型的大小)
explicit(用于构造函数,防止不希望的隐式类型转换)
三、访问修饰符(在类中)
public(成员可以被任何代码访问)
protected(成员可以被类的成员函数、友元函数或派生类访问)
private(成员只能被类的成员函数和友元函数访问)
四、作用域解析运算符
::(作用域解析运算符,用于指定类、命名空间或其他作用域中的成员)
五、函数修饰符
inline(建议编译器内联函数,即将函数调用替换为函数体,以减少函数调用的开销)
virtual(在基类中声明,允许派生类覆盖该函数)
override(C++11引入,确保成员函数确实覆盖了基类中的虚函数)
final(C++11引入,禁止类被继承,或禁止虚函数在派生类中被覆盖)
noexcept(C++11引入,指定函数不会抛出异常)
六、模板修饰符
template(用于声明模板类、模板函数等)
七、友元修饰符
friend(声明友元函数或友元类,这些函数或类可以访问类的私有和保护成员)
举个例子
//访问修饰符
class MyClass {  
public:  int publicVar;  
protected:  int protectedVar;  
private:  int privateVar;  
};  int main() {  MyClass obj;  obj.publicVar = 10; // 访问 public 成员  // obj.protectedVar = 20; // 错误:无法从类外部直接访问 protected 成员  // obj.privateVar = 30; // 错误:无法从类外部直接访问 private 成员  return 0;  
}//存储修饰符
class MyClass {  
public:  static int staticVar; // 静态成员变量  
};  int MyClass::staticVar = 0; // 静态成员变量需要在类外部定义  void function() {  extern int globalVar; // 声明外部变量  // ... 假设 globalVar 在其他地方已定义  register int regVar; // register 修饰符在现代编译器中通常被忽略  const class WithConst {  public:  mutable int mutVar; // 可变的成员变量,可以在 const 成员函数中被修改  } obj;  const WithConst* constPtr = &obj;  constPtr->mutVar = 5; // 可以在 const 成员函数外通过非 const 指针修改 mutable 成员  
}  // thread_local 示例  
thread_local int tlsVar = 0; // 每个线程都有自己的 tlsVar 副本//类型修饰符
const int constVar = 10; // 不可变的整数  
volatile int volVar; // 可能被外部因素(如硬件)改变的整数  
signed int signedInt = -5; // 有符号整数  
unsigned int unsignedInt = 5; // 无符号整数  
short shortVar = 100; // 短整数  
long longVar = 1000000000; // 长整数  
float floatVar = 3.14f; // 单精度浮点数  
double doubleVar = 3.141592653589793; // 双精度浮点数  
long double longDoubleVar = 3.141592653589793238L; // 扩展双精度浮点数//函数修饰符
class Base {  
public:  virtual void virtualFunc() { /* ... */ } // 虚函数  
};  class Derived : public Base {  
public:  void virtualFunc() override { /* ... */ } // 重写虚函数并使用 override 修饰符  
};  class FinalClass final { // 使用 final 修饰符的类,不能被继承  
public:  void finalFunc() final { /* ... */ } // 使用 final 修饰符的函数,不能被重写  
};  class NoImplicitConv {  
public:  explicit NoImplicitConv(int x) : value(x) {} // 构造函数使用 explicit 修饰符,防止隐式转换  
private:  int value;  
};  void noExceptFunc() noexcept { // 声明函数不会抛出异常  // ...  
}//其他
constexpr int constexprVar = 10; // 编译时常量  
alignas(double) char alignedArray[sizeof(double) * 10]; // 强制对齐的数组