C++修饰符类型

发布时间 2023-11-09 09:43:41作者: 长弓令山

1、static

  静态存储修饰符:

  作用于变量时,使变量只被初始化一次,并且变量生命周期延长至和当前进程一致。

  作用于函数时,时函数只在当前文件中可见,调用权限只在当前文件。

 

2、const

  常量类型修饰符:

  作用于变量时,使该变量不可被更改。

const int value = 0;

  

  作用于函数的指针类型形参时,使该指针指向的内容不可被更改。

int FunTion(const int *value);

 

  作用于类的成员函数时,使该函数不能修改类的成员变量。

class Base {
  private:
    string name;
    int age;

  private:
    void MyPrint()const;
};

 

3、mutable

  可变对象修饰符:

  作用于类内成员变量时,可以让带有const修饰的函数修改该成员变量。

class Base {
  private:
    string name;
    int age;
    mutable int printTimes;
  private:
    void MyPrint()const;
};

 

4、restrict

  限制访问修饰符:

  作用于某块内存的指针时,限制这块内存只能通过该指针访问;

char * restrict name = (char *)malloc(256);

  例如memcpy可能出现内存重叠问题,例如s1访问长度过长已经达到了s2所指向的内存区域,可能出现问题。

  若没有restrict就不会有这个限制。

void * memcpy(void * restrict s1, const void * restrict s2, size_t n);
void * memmove(void * s1, const void * s2, size_t n);

 

5、volatile

  易变变量修饰符

  作用于变量时,使变量不会被编译优化(相当于告诉编译器此变量可能会被其他的外部因素改变,如硬件或其他线程)

volatile int num = 20; 

 

6、register

  寄存器变量修饰符

  作用于变量时,期望编译后会吧把该变量放在CPU的寄存器中,以便频繁调用节省时间开销。

void example_function(register int num) {
    // register 关键字建议编译器将变量 num 存储在寄存器中
    // 以提高程序执行速度
    // 但是实际上是否会存储在寄存器中由编译器决定
}