cpp learning

static 关键字有两个用途。

在源文件中使用 static

在源文件中,如果将某一变量或者函数前面加上 static ,那么这个变量或者函数就只属于这个源文件范围。这样就可以避免在链接过程中和其他文件重名导致链接出错。如果存在两个相同的全局变量,链接的时候就会出错。static 保证了变量在文件中私有,其他文件看不到自然也引用不到。

我的建议是如果可以用 static 变量,那么就尽量用,这样变量限制在一个文件内,就不容易出现全局变量,也不容易出现 bug。

如果 B 文件想要引用 A 文件的 var 变量,可以利用 extern 关键字引用该变量,这也叫变量声明。

extern int var;

在类和结构体里面使用 static

如果同个类的每个对象都公用一个变量,这种变量称为静态变量,在类定义的时候声明,类外面定义。同样类里面的函数加上 static 就是静态函数,静态函数不允许有对象变量在里面,因为静态函数是公共的,并不属于一个对象。

struct Entity{
    static int n;
    static add(){
        n++;
    }
}
int Entity::n;