【问题标题】:accessing variables from an intended block of nested blocks [duplicate]从嵌套块的预期块访问变量[重复]
【发布时间】:2016-10-08 06:20:45
【问题描述】:

在下面的程序中,如何从 Block C 中的 Block A 中获取 aa 的值? 我们只能使用范围解析运算符访问最外层的全局 aa。

已知的解决方案: 1.在不同的block中使用不同的指针 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;
}

【问题讨论】:

    标签: c++ c++11


    【解决方案1】:

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

    你不能。

    变量aa的未修饰使用将使用最近范围内的变量。
    变量::aa 的修饰使用将使用函数外范围内的变量。
    变量&lt;NS&gt;::aa 的修饰使用将使用命名空间&lt;NS&gt; 范围内的变量。

    【讨论】:

      【解决方案2】:

      使用引用。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-02
        • 1970-01-01
        • 2012-06-09
        • 1970-01-01
        • 2011-10-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多