К Т П           План занятия                                                              1                                           Страницы  | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 |

5. Неявное указание блоков

Если программист не указал скобки для блока стейтментов if или else, то компилятор неявно сделает это за него. Таким образом, следующее:

if (выражение)
    стейтмент1
else
    стейтмент2

Будет выполняться как:

if (выражение)
{
    стейтмент1
}
else
{
    стейтмент2
}

По сути, это не имеет значения. Однако начинающие программисты иногда пытаются сделать что-то вроде следующего:

#include <iostream>
int main()
{
    if (1)
        int a = 4;
    else
        int a = 5;
    std::cout << a;
    return 0;
}

Программа не скомпилируется, и в итоге мы получим ошибку, что идентификатор a не определен. А произойдет это из-за того, что программа будет выполняться следующим образом:

#include <iostream>
int main()
{
    if (1)
    {
        int a = 4;
    } // переменная a уничтожается здесь
    else
    {
        int a = 5;
    } // переменная a уничтожается здесь
    std::cout << a; // переменная a здесь не определена
    return 0;
}

В этом контексте становится понятным, что переменная a имеет локальную область видимости и уничтожается в конце блока, в котором выполняется её инициализация. И, когда мы дойдем до строчки с std::cout, переменная a уже перестанет существовать.

 

 

 


Предыдущая        В начало страницы       Следующая
5