MST

星途 面试题库

面试题:C++同名变量在复杂函数嵌套中的作用域问题

假设有多层函数嵌套,每层都有与全局变量同名的局部变量,分析并说明如何在最内层函数中正确访问到全局变量,同时阐述在这种情况下编译器查找变量的顺序,给出相应代码示例。
33.8万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

1. 访问全局变量方法

在Python中,使用global关键字声明变量,这样在最内层函数中就可以访问和修改全局变量。在C++中,可以使用::作用域解析运算符来访问全局变量。

2. 编译器查找变量顺序

  • Python:先在局部作用域查找变量,如果找不到则在内层嵌套作用域查找,接着在外层嵌套作用域查找,最后在全局作用域查找,如果还是找不到则在内置作用域查找。
  • C++:从最内层作用域开始查找变量,如果找到同名变量则使用该变量。如果找不到,则向外层作用域查找,直到找到或者到达全局作用域。如果全局作用域也没有找到,则报错。

3. 代码示例

  • Python代码示例
global_variable = 10

def outer():
    global_variable = 20
    def inner():
        global global_variable
        global_variable = 30
        return global_variable
    return inner()

print(outer())
print(global_variable)
  • C++代码示例
#include <iostream>

int global_variable = 10;

void outer() {
    int global_variable = 20;
    auto inner = []() {
        ::global_variable = 30;
        return ::global_variable;
    };
    std::cout << inner() << std::endl;
}

int main() {
    outer();
    std::cout << global_variable << std::endl;
    return 0;
}