从嵌套块的预期块访问变量

accessing variables from an intended block of nested blocks

本文关键字:访问 变量 嵌套      更新时间:2023-10-16

在下面的程序中,如何从Block A中检索Block C中的aa值?只能使用作用域解析操作符访问最外层的全局aa。

solutoins:1. 在不同的块中使用不同的指针2. 在使用当前块的变量

之前,先使用父块中的变量

我正在寻找任何其他替代解决方案

我知道这不是好的代码。只是想知道如何实现它。

#include <iostream>
#include <cstdio>
using namespace std;
// Global
int aa = 10;
int main()
{
    // Main
    int aa = 20;
    {
        // Block A
        int aa = 30;
        {
            // Block B
            int aa = 40;
            {
                // Block C
                int aa = 50;
                cout << "block C " << aa << endl;
                cout << "block A " << ????? << endl;
                cout << "global" << ::aa << endl;
            }
            cout << "block B " << aa << endl;
        }
        cout << "block A " << aa << endl;
    }
    cout << "main " << aa << endl;
    return 0;
}

我知道这不是好的代码。只是想知道如何实现它。

你不能。

未修饰的使用变量aa将使用最近作用域中的变量。
对变量::aa的修饰使用将使用函数外部作用域中的变量。
对变量<NS>::aa的修饰使用将使用名称空间<NS>范围内的变量。

使用引用

// Block A
int aa = 30;
auto& ref_aa = aa;
{
    // Block B
    int aa = 40;
    {
        // Block C
        int aa = 50;
        cout << "block C " << aa << endl;
        cout << "block A " << ref_aa << endl;
        cout << "global" << ::aa << endl;
    }
    cout << "block B " << aa << endl;
}

当然,这是毫无意义的;如果您可以修改代码,那么只需更改变量名,或者重构它,以便需要更少的块(例如,使用更多的函数)。