存储说明符的种类:
- auto
- register
- static
- extern
- thread_local
- mutable
auto
auto的便利性在于STL库中一些变量的声明,下面这个例子itva与itvb的声明方式立显auto的便利性。
//声明一个vector<vector<int>>的容器
std::vector<vector<int>> v;
//声明一个v的迭代器指向v.begin();
auto itva = v.begin();
std::vector<vector<int>>::iterator itvb = v.begin();
register
这个存储说明符在C++11中用法已经被废了,还留着是为了兼容以前的程序,可以无视它。
以前是为了告诉编译器尽量将其后面变量放入寄存器中,加快程序的运行速度;注意是尽量,不一定就真的会被放入寄存器。
static
- 修饰函数,使函数为内部链接性;
- 修饰代码块之外的变量,使全局变量为内部链接性;
- 修饰代码块之内的变量,使变量为静态变量;
- 修饰类/结构体?(暂时还没复习到,先空着)
extern
- 修饰普通变量:为声明,声明此变量是全局变量(前面必须有变量的定义);
- 修饰const:将const的内部链接性转变为外部链接性;
- extern “C”:表示用C的方法编译xxx函数;
//其余文件有int a
extern int a;
extern static int b;
extern "C" void func(int var);
先空着吧,有空整理
thread_local
空着
mutable
若类/结构体被const修饰,其中被mutable修饰的变量仍然可以被修改;
补充一个volatile
告诉编译器,被volatile修饰的变量是易变的,不要对其取用方式进行优化(只从变量的存放地取变量值)