这些说明符和限定符决定了变量保留在内存中的时间(存储的持续性)和程序的那一部分可以使用它们(作用域和链接性)
auto:自动类型推断
register:说明该变量的使用频率比较高,变量采用寄存器存储,
static:静态变量在整个程序执行期间都存在,分为静态全局变量和静态局部变量。静态全局变量意味着只对文件内部可见,其他 文件不能使用这个变量,即有内部链接性;静态局部变量则只对声明它的块儿起作用,但是它的生命周期会持续到程序结束
extern:引用声明,这个变量是在其他文件中定义的,即声明在其他文件中定义的变量。
thread_local:变量的持续性与其所属线程的持续性相同
const:被它修饰的变量是只读的,程序不能对它进行修改。它的链接性也是内部的,即只对本文件有效;如果希望它的链接性为 外部的,则可以在前面加上extern
Volatile:即使程序代码没有对属于变量的内存单元进行修改,变量也可能发生变化。它的作用是改善编译器的优化能力。假如编 译器发现程序中有几条语句两次使用了某个变量的值,则编译器可能不是让程序查找这个值两次,而是将这个值缓存到寄 存器中,这种优化假设变量的值在这两次使用之间不发生变化。而将变量声明为volatile,相当于告诉编译器不要进行这种 优化。优化器在用到这个变量的时候必须每次都小心地重新读取这个变量值,而不是使用保存在寄存器里的备份。
mutable:即使结构(或类)变量为const,但如果其中某个成员有mutable声明符,则这个成员可以被修改
因为函数是不能够嵌套定义的,即不能在一个函数体里面又去定义另一个函数,所以C++函数就可以在文件之间共享(但是如果使用了关键字static限定符,则这个函数只能本文件内可见,即它是内部链接性的)。