面试题答案
一键面试-
特性和影响:
- 作用域限制:当
static
关键字用于全局变量时,该变量的作用域被限制在声明它的源文件内。其他源文件无法直接访问该变量,即使通过extern
声明也不行。这有助于避免不同源文件中全局变量的命名冲突。 - 内存特性:静态全局变量存储在静态存储区,其生命周期贯穿整个程序的运行期间。在程序启动时分配内存,程序结束时释放内存。
- 作用域限制:当
-
代码示例:
- 源文件1(main.cpp):
#include <iostream>
// 静态全局变量
static int staticGlobalVar = 10;
void printStaticGlobalVar() {
std::cout << "Static global variable value: " << staticGlobalVar << std::endl;
}
- 源文件2(other.cpp):
// 尝试在另一个源文件中访问main.cpp中的静态全局变量,即使使用extern声明也无法访问
// extern int staticGlobalVar; // 这行代码会导致链接错误
// 如果没有上面的extern声明,下面函数编译链接都正常,但无法访问main.cpp中的staticGlobalVar
void tryAccessStaticGlobalVar() {
// std::cout << "Trying to access static global variable from other file: " << staticGlobalVar << std::endl; // 无法访问
}
- 主函数调用:
int main() {
printStaticGlobalVar();
// tryAccessStaticGlobalVar(); // 如果取消注释,会因为无法访问而导致链接错误
return 0;
}
在上述代码中,staticGlobalVar
是一个静态全局变量,其作用域仅限于main.cpp
。在other.cpp
中,即使尝试使用extern
声明来访问它,也会导致链接错误,体现了其作用域的限制特性。同时,由于它是静态存储,在程序运行期间一直存在。