Table of Contents
#custom-toc-container
静态 static
# C++中的静态 两个cpp文件定义同名全局变量(如两个**int a;**,这是**完全全局变量**),会出现重定义错误。 若是其中一个用`static`修饰,使其成为静态全局变量,则不会出现错误。static全局变量只在当前cpp文件有效(**只对定义它的翻译单元可见**)。 ```cpp /** test.cpp **/ int a; // static int a; // 使用static修饰,错误消失 /** main.cpp **/ #include
using namespace std; int a; int main() { cout << "Hello World!!!" << endl; return 0; } ``` 执行以下命令,编译源文件(cpp文件),由于定义了两个全局变量a,所以会出现`重定义错误`。 ```shell g++ -o main main.cpp test.cpp ``` # 类和结构体中的静态 类和结构体中的 static成员变量 和 static成员函数,可以通过类名访问。 **static成员变量**是所有类实例`共享的`,该变量与类的所有实例共享内存。 **static成员函数**不能访问非静态(non static)成员变量,要访问(读取、修改)非静态成员需要设置函数参数。 # 局部静态 (Local Static) C++语言使用{}表示一个局部, 如函数{}、if(){}等,下面以函数为例进行说明。 函数中,static修饰的变量定义语句只会执行一次,静态变量一旦定义就会一直存在于内存。 函数中的静态局部变量,`作用域`为函数内部,`生存期`基本上相当于整个程序的生存期。