一、常规的 静态局部变量,静态成员变量和成员函数没啥疑问
二、全局变量问题。。。
* 如果在 C++ 文件中使用 static 修饰全局变量,
* 它将限制变量的作用域在当前文件内。
* 这意味着其他文件无法直接访问或修改这个变量的值。
* 如果你希望全局变量可以在多个文件中访问和修改,
* 应该在头文件中声明它,并在一个源文件中定义它,
* 然后在其他文件中通过 extern 关键字进行声明并使用。
* static修饰的全局变量的声明与定义同时进行
* 如果在头文件中定义static变量,
* 证明包含了所有这个头文件的源文件都定义了该变量,
* 会造成变量多次定义浪费内存,而且不是真正的全局变量
二、全局常量
const单独使用时,其特性与static一样(每个编译单元中地址都不一样,不过因为是常量,也不能修改,所以就没有多大关系)。
const与extern一起使用时,其特性与extern一样
三、static函数
和static变量一样,,如果是 在头文件 里 使用 static 修饰定义,,那样所有引用该头文件的都会有自己的该函数副本,相当于inline 了,,,,就不应该再头文件中去定义函数,不加static 就会导致重定义,加了又不是一个函数
上述在头文件中定义static 函数 对于大多数情况没啥问题,,但是如果这个函数里面定义了静态局部变量用于统计进入的次数等功能,那这个函数的功能就没有达到,,因为都是独立的了。。。
个人认为static 函数就只应该在cpp中定义,不想被其他地方知道使用的,,,,
四、全局原则
1.永远把extern变量和函数声明在头文件中,不要把它们放在源文件里,保持一处声明原则;
2.不要忘记在定义extern变量和函数处include它们的头文件;
3.不要忘记在使用extern变量和函数处include它们的头文件;
4.不要忘记头文件全局变量之前的extern关键字,否则多个源文件include该头文件后,会多次创建这个变量