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关键字声明。

浙公网安备 33010602011771号