С++ для начинающих




Локальная область видимости - часть 3


void fooBar( int *ia, int sz )

{

     for (int i=0; i<sz; ++i) ... // правильно

     for (int i=0; i<sz; ++i) ... // правильно, другое i

     for (int i=0; i<sz; ++i) ... // правильно, другое i

}

Аналогично переменная может быть объявлена внутри условия инструкций if и switch, а также внутри условия циклов while и for. Например:

if ( int *pi = getValue() )

{

    // pi != 0 -- *pi можно использовать здесь

    int result = calc(*pi);

    // ...

}

else

{

    // здесь pi тоже видна

    // pi == 0

    cout << "ошибка: getValue() завершилась неудачно" << endl;

}

Переменные, определенные в условии инструкции if, как переменная pi, видны только внутри if и соответствующей части else, а также во вложенных областях. Значением условия является значение этой переменной, которое она получает в результате инициализации. Если pi равна 0 (нулевой указатель), условие ложно и выполняется ветвь else. Если pi инициализируется любым другим значением, условие истинно и выполняется ветвь if. (Инструкции if, switch, for и while рассматривались в главе 5.)

Упражнение 8.1

Найдите различные области видимости в следующем примере. Какие объявления ошибочны и почему?

int ix = 1024;

int ix() ;

void func( int ix, int iy ) {

    int ix = 255;

    if (int ix=0) {

       int ix = 79;

       {

           int ix = 89;

       }

    }

    else {

        int ix = 99;

    }

}

Упражнение 8.2

К каким объявлениям относятся различные использования переменных ix и iy в следующем примере:

int ix = 1024;

void func( int ix, int iy ) {

    ix = 100;

    for( int iy = 0; iy < 400; iy += 100 ) {

        iy += 100;

        ix = 300;

    }

    iy = 400;

}




Содержание  Назад  Вперед