|
|
||
3. Сокрытие имен |
||
Переменная внутри вложенного блока может иметь то же имя, что и переменная внутри внешнего блока. Когда подобное случается, то переменная во вложенном (внутреннем) блоке «скрывает» внешнюю переменную. Это называется сокрытием имен: #include <iostream>
int main()
{ // внешний блок
int oranges(5); // внешняя переменная oranges
if (oranges >= 5) // относится к внешней oranges
{ // вложенный блок
int oranges; // скрывается внешняя переменная oranges
// Идентификатор oranges теперь относится к вложенной переменной oranges.
// Внешняя переменная oranges временно скрыта
oranges = 10; // здесь мы присваиваем значение 10 вложенной переменной oranges, не внешней!
std::cout << oranges << std::endl; // выводим значение вложенной переменной oranges
} // вложенная переменная oranges уничтожается
// Идентификатор oranges опять относится к внешней переменной oranges
std::cout << oranges << std::endl; // выводим значение внешней переменной oranges
return 0;
} // внешняя переменная oranges уничтожается
Результат выполнения программы: 10 Здесь мы сначала объявляем переменную oranges во внешнем блоке. Затем объявляем вторую переменную oranges, но уже во вложенном (внутреннем) блоке. Когда мы присваиваем oranges значение 10, то оно относится к переменной во вложенном блоке. После вывода этого значения (и окончания внутреннего блока), внутренняя переменная oranges уничтожается, оставляя внешнюю oranges с исходным значением (5), которое затем выводится. Результат выполнения программы был бы тот же, даже если бы мы назвали вложенную переменную по-другому (например, nbOranges). |
||
Правило: Избегайте использования вложенных переменных с именами, идентичными именам внешних переменных. |
||
|
||
3 |