MST

星途 面试题库

面试题:C++中如何限制全局变量的作用域

在C++ 中,默认情况下全局变量具有全局作用域。请描述至少两种方法来限制全局变量的作用域,使其仅在特定的源文件或命名空间内有效,并给出相应的代码示例。
47.7万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

方法一:使用 static 关键字

在源文件中定义全局变量时,使用 static 关键字修饰,这样该变量的作用域就被限制在当前源文件内。

示例代码如下:

// file1.cpp
static int staticGlobalVariable = 10; 

void printStaticGlobal() {
    std::cout << "Static global variable value: " << staticGlobalVariable << std::endl;
}

方法二:使用命名空间

将全局变量定义在一个命名空间内,其他源文件如果不使用 using 声明或 using 指示,就无法访问该命名空间内的变量。

示例代码如下:

// file2.cpp
namespace MyNamespace {
    int namespaceGlobalVariable = 20; 
}

void printNamespaceGlobal() {
    std::cout << "Namespace global variable value: " << MyNamespace::namespaceGlobalVariable << std::endl;
}

在其他源文件中,若要访问 MyNamespace::namespaceGlobalVariable,需使用 MyNamespace:: 前缀:

// main.cpp
#include <iostream>
// 假设已经包含了 file2.cpp 中函数的声明
int main() {
    // std::cout << namespaceGlobalVariable << std::endl; // 错误,直接访问会报错
    printNamespaceGlobal(); 
    return 0;
}