C++学习记录<3>
C++ 存储类
C++中存储类的相关修饰符主要有auto、register、static、extern、mutable、thread_local等等
auto
aut关键字主要用于以下两种情况:
- 声明变量的时候根据初始化表达式自动推断出该变量的类型
- 声明函数时函数返回值的占位符
auto f=3.14; //double
auto s("hello"); //const char*
auto z = new auto(9); // int*
auto x1 = 5, x2 = 5.0, x3='r';//错误,必须是初始化为同一类型
register
register 存储类主要是用于定义存储在寄存器中而不是存储在RAM中的局部变量。这意味着变量的最大尺寸就只能是一个寄存器的大小,且不能进行一元运算&,因为并没有内存位置。
register int dt; //dt被定义在寄存器上
定义在寄存器上是表示这些变量需要进行快速的访问,比如说计数器等等,此外定义了register不代表这个变量一定就在寄存器上,如果硬件上没有寄存器,那也无可奈何。
static
static修饰表示了编译器在程序的运行周期内一直都保持着局部变量的存在,不需要在离开这个变量的作用域时进行频繁的创建和销毁,此外使用static还可以再函数调用之间保持那个局部变量的值不变。
static也可以用来对全局变量进行修饰,当期修饰全局变量时,它的作用域被限制在声明定义它的文件内部
如果static修饰了类的成员变量时,则所有的类对象都会共享这一个变量的数值。
extern
extern提供了一个全局变量的引用,其对所有的程序文件都是可见的,当有多个文件都需要使用到一个变量时,就可以依靠extern来得到已经在其他文件中定义过的变量的引用,即:extern用来在另外一个文件中声明一个全局变量或者全局函数。
执行结果为:
$ ./write
Count is 5
mutable
mutable主要是用来将对象的成员变量替换为常量
thread_local
thread_local可以用来在其上创建的线程上进行访问,变量在创建线程时创建,在线程销毁时被销毁,在不同的线程中其被修饰的变量都拥有各自的副本!
C++ 运算符
运算符是一种告诉编译器执行特性数字或者逻辑操作的符号,主要有:算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符以及杂项运算符。