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

时间:2016-10-08 06:20:45

标签: c++ c++11

在下面的程序中,如何从C区块A中检索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;
}

2 个答案:

答案 0 :(得分:3)

  

我知道这不是好代码。只是好奇了解如何实现它。

你不能。

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

答案 1 :(得分:0)

使用参考。

// 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;
}

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