static、extern、volatile的用法

来源:互联网 发布:linux 同步时区 编辑:程序博客网 时间:2024/05/29 10:33
static的用法: 

静态变量作用范围在一个文件内,程序开始时分配空间,结束时释放空间,默认初始化为0,使用时可以改变其值。 
静态变量或静态函数只有本文件内的代码才能访问它,它的名字在其它文件中不可见。 
用法1:函数内部声明的static变量,可作为对象间的一种通信机制 
如果一局部变量被声明为static,那么将只有唯一的一个静态分配的对象,它被用于在该函数的所有调用中表示这个变量。这个对象将只在执行线程第一次到达它的定义使初始化。 
用法2:局部静态对象 
对于局部静态对象,构造函数是在控制线程第一次通过该对象的定义时调用。在程序结束时,局部静态对象的析构函数将按照他们被构造的相反顺序逐一调用,没有规定确切时间。 
用法3:静态成员和静态成员函数 
如果一个变量是类的一部分,但却不是该类的各个对象的一部分,它就被成为是一个static静态成员。一个static成员只有唯一的一份副本,而不像常规的非static成员那样在每个对象里各有一份副本。同理,一个需要访问类成员,而不需要针对特定对象去调用的函数,也被称为一个static成员函数。 
类的静态成员函数只能访问类的静态成员(变量或函数)。 

extern的用法: 
extern可以声明其他文件内定义的变量。在一个程序里,一个对象只能定义一次,它可以有多个声明,但类型必须完全一样。如果定义在全局作用域或者名字空间作用域里某一个变量没有初始化,它会被按照默认方式初始化。 
将变量或函数声明成外部链接,即该变量或函数名在其它函数中可见。被其修饰的变量(外部变量)是静态分配空间的,即程序开始时分配,结束时释放。 
在C++中,还可以指定使用另一语言链接,需要与特定的转换符一起使用。 
extern “C” 声明语句 
extern “C” { 声明语句块 } 

volatile的用法: 
类型修正符(type-modifier),限定一个对象可被外部进程(操作系统、硬件或并发进程等)改变。volatile与变量连用,可以让变量被不同的线程访问和修改。声明时语法: 
int volatile vInt; 
常用于像中断处理程序之类的异步进程进行内存单元访问。 
除了基本类型外,对用户定义类型也可以用volatile类型进行修饰。 
注意:可以把一个非volatile int赋给volatile int,但是不能把非volatile对象赋给一个volatile对象。 
一个有volatile标识符的类只能访问它接口的子集,一个由类的实现者控制的子集。用户只能用const_cast来获得对类型接口的完全访问。此外,volatile向const一样会从类传递到它的成员。

 

原创粉丝点击