const: 声明指定类型的常量,被const 类型修饰对象在程序执行期间不能被修改改变。
volatile:告诉编译器不需要优化volatile声明的变量,让程序可以直接从内存读
取变量(对于一般的变量编译器会对变量进行优化, 将内存中的变量值放在寄存器中以加快读写效率)。auto: 声明变量时根据初始化表达式自动推断该变量的类型、声明函数时函数返回值的占位符,C++11中已删除该用法,只能修饰变量
register:寄存器变量,请求编译器将这个变量保存在CPU的寄存器中,从而加快程序的运行,被register修饰的变量不能够用&取址,并且被register修饰
的变量不一定存储在寄存器中,这取决于硬件和实现的限制,只能修饰变量static: 修饰局部变量时,在函数调用结束后不释放存储空间,再次调用函数时该变量已经有值,可以在函数调用之间保持局部变量的值。修饰全局变量
或者函数时,会使变量的作用域限制在声明它的文件内extern: 声明一个变量,extern放在变量或者函数之前,表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义,
声明可以多次,但定义只能一次,可同时修饰变量和函数。extern 修饰符通常用于当有两个或多个文件共享相同的全局变量或函数的时候thread_local:仅可在它在其上创建的线程上访问。 变量在创建线程时创建,并在销毁线程时销毁,可以与 static 或 extern 并用, 很少用到
例如:
main.cpp:
#include "pch.h"
#include<iostream>
using namespace std;
extern float calc_square(int r); // 声明一个函数,可以在另一文件中定义,也可以在本文件中定义
int main()
{
float square;
auto r = 15; // auto自动识别变量类型
square = calc_square(r);
cout << "circle square=" << square << endl;
return 0;
}
test.cpp中:
#include "pch.h"
#include<iostream>
using namespace std;
const static float PI = 3.14; // static声明作用于仅限于本文件
float calc_square(int r)
{
float square;
square = PI * r * r;
return square;
}
运行结果:
运行结果.png
网友评论