MST

星途 面试题库

面试题:C++中全局变量使用static的特性及影响

在C++中,当把static关键字用于全局变量时,它会产生哪些特性和影响?请举例说明如何通过代码体现这些特性。
16.2万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 特性和影响

    • 作用域限制:当static关键字用于全局变量时,该变量的作用域被限制在声明它的源文件内。其他源文件无法直接访问该变量,即使通过extern声明也不行。这有助于避免不同源文件中全局变量的命名冲突。
    • 内存特性:静态全局变量存储在静态存储区,其生命周期贯穿整个程序的运行期间。在程序启动时分配内存,程序结束时释放内存。
  2. 代码示例

    • 源文件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声明来访问它,也会导致链接错误,体现了其作用域的限制特性。同时,由于它是静态存储,在程序运行期间一直存在。