Форум программистов, компьютерный форум CyberForum.ru

Почему можно переопределять переменную в цикле? - C++

Восстановить пароль Регистрация
 
lest_
0 / 0 / 0
Регистрация: 28.11.2013
Сообщений: 94
26.05.2014, 18:01     Почему можно переопределять переменную в цикле? #1
привет.

Привожу листинг из учебника. Это есть програмка для вывода меню на экран. Ненужные куски кода убрал.
C++
1
2
3
4
5
6
7
8
9
10
11
// ...
int main()
{
    // код... 
    for(;;) // бесконечный цикл
    {
        int choice = menu();
        // что-делаем...        
    } // конец бесконечного цикла           
    return 0;     
} // конец main()
Здесь есть бесконечный цикл (строки 5-9). Мне не понятна строчка 7. Здесь создаётся и инициализируется переменная choice. Инициализируется она значением, которое возвращает функция menu. Затем что-то делается в цикле (выводятся всякие сообщения на экран и т.п.). Потом цикл повторяется снова (если условие выхода не выполнено). Что происходит, когда мы повторяем цикл? Создаётся новая переменная по имени choice, а старая становится недоступной? Или он использует ту же самую переменную?

Просто если написать так:
C++
1
2
3
4
5
int main()
{
    int a = 10;
    int a = 10;
//...
то компилятор пометит строку 4 как ошибку и напишет: "error C2374: a: переопределение; множественная инициализация". В случае с циклом, вроде бы что-то аналогичное происходит, но при этом программа запускается, и компилятор ошибок не выдаёт. Но при этом не понятно, что происходит. Можно вообще переписать это как-то более ясно? Я попробовал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
// ...
int main()
{
    // код... 
    int choice;
    for(;;) // бесконечный цикл
    {
        choice = menu();
        // что-делаем...        
    } // конец бесконечного цикла           
    return 0;     
} // конец main()
то есть, определяю переменную 1 раз в строке 5. А на каждой итерации цикла просто присваиваю переменной новое значение, посчитанное функцией. Вроде програмка также работает. Но при этом в учебнике используется непонятный вариант 1.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2014, 18:01     Почему можно переопределять переменную в цикле?
Посмотрите здесь:

Подскажите почему он не выводит переменную S C++
C++ В цикле почему-то проходит по условию только один раз
Создать два потока, которые в конечном цикле инкримируют 1 переменную заданое число раз C++
В цикле где выводится матрица j принимает какие-то странные значения. Почему? C++
C++ почему линковщик не видит статическую переменную:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.05.2014, 18:16     Почему можно переопределять переменную в цикле? #2
...
Цитата Сообщение от lest_ Посмотреть сообщение
Что происходит, когда мы повторяем цикл?
Цитата Сообщение от lest_ Посмотреть сообщение
Создаётся новая переменная по имени choice, а старая становится недоступной
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
26.05.2014, 18:21     Почему можно переопределять переменную в цикле? #3
Цитата Сообщение от lest_ Посмотреть сообщение
Можно вообще переписать это как-то более ясно? Я попробовал так:
Как правило, переменные стараются делать как можно более локальными. Если переменная используется только в цикле и не нужна за его пределами, значит, ее объявлению место в теле цикла.
lest_
0 / 0 / 0
Регистрация: 28.11.2013
Сообщений: 94
26.05.2014, 19:17  [ТС]     Почему можно переопределять переменную в цикле? #4
Цитата Сообщение от 0x10 Посмотреть сообщение
Как правило, переменные стараются делать как можно более локальными. Если переменная используется только в цикле и не нужна за его пределами, значит, ее объявлению место в теле цикла.
а может так случиться, что память кончится? ведь на каждой итерации создаётся новая переменная. а вдруг итераций оч много будет
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.05.2014, 19:19     Почему можно переопределять переменную в цикле? #5
Цитата Сообщение от lest_ Посмотреть сообщение
а может так случиться, что память кончится? ведь на каждой итерации создаётся новая переменная. а вдруг итераций оч много будет
После каждой итерации память под перемнной будет освобождаться.
Yandex
Объявления
26.05.2014, 19:19     Почему можно переопределять переменную в цикле?
Ответ Создать тему
Опции темы

Текущее время: 21:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru