2016-10-08 2 views
1

В следующей программе, как получить значение aa из блока A в блоке C? Мы можем получить доступ только к внешнему глобальному 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; 
} 

ответ

3

Я знаю, что это не хороший код. Просто любопытно понять, как его достичь.

Вы не можете.

Недекорированное использование переменной aa будет использовать ту, которая находится в ближайшей области.
Декорированное использование переменной, ::aa, будет использовать ту, которая находится в области вне функции.
Награжденное использование переменной, <NS>::aa, будет использовать ту, которая находится в области пространства имен <NS>.

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

Конечно, это совершенно бессмысленно; если вы можете изменить код, просто измените имена переменных или отредактируйте их так, чтобы было необходимо меньшее количество блоков (например, с использованием большего числа функций).

Смежные вопросы