c++限定符

1. volatile

表明即使程序没用对内存单元进行修改,其值也可能发生变化。

  • 比如一个指针指向一个硬件位置,硬件可能会修改指针所指向的值。
  • 两个 程序互相影响共享数据。
    如果编译器发现几条语句两次使用了某个变量,编译不会让程序查找这个值两次,而是将这个值缓存到寄存器中。这种优化假设变量的值在两次使用之间不会发生变化。如果声明为volatile就会告诉编译器不要进行这种优化。
    多次使用某个变量时,编译器可能会将其放到寄存器里,volatile表明这个变量是易变的,即使不是程序改变变量的值,告诉编译器不要进行这种优化

2. mutable

mutable表示某个结构或类即使声明为const,其某个成员也可以被修改。

struct data{
    char name[30];
    mutable int x; // x无论在结构是否声明为const也可以被修改
}

……

const struct data veep = {"balabala", 3};
veep.x = 4; // 可以
veep.name = "abcd"; // 不可以进行修改

3. const对全局变量的影响

const会对全局变量的链接性产生影响,让全局变量变成内链接,就像使用了static一样。
如果把一组常量定义在头文件中,预处理器包含头文件后,每个文件都会有常量的定义,如果被const修饰的全局变量的链接性还是外部链接,将违反单定义规则。

如果想让常量的链接性时外部的,可以使用extern关键字来覆盖默认的内部链接性。

extern const int states = 50; // 定义常量时使用extern

此时所有使用该常量的文件读需要使用extern关键字声明。

posted @ 2022-06-18 17:02  店里最会撒谎白玉汤  阅读(60)  评论(0)    收藏  举报