Почему Java, C и C++ (возможно, другие языки также) не позволяют использовать более одного типа для переменных for-loop? Например:Ограничение типа в переменных цикла в Java, C и C++
for (int i = 0; i < 15; i++)
В этом случае мы имеем переменную цикла i, которая является счетчиком циклов.
Но я могу иметь другую переменную, область видимости которой ограничена циклом, а не каждой итерации. Например:
for (int i = 0, variable = obj.operation(); i < 15; i++) { ... }
Я хранения obj.operation()
возвращаемые данные в variable
, потому что я хочу, чтобы использовать его только внутри цикла. Я не хочу, чтобы variable
хранился в памяти и не оставался видимым после выполнения цикла. Не только для свободного пространства памяти, но и для предотвращения нежелательного поведения, вызванного неправильным использованием variable
.
Поэтому переменные цикла полезны, но не поддерживаются в значительной степени из-за ограничения типа. Представьте, что метод operation()
возвращает длинное значение. Если это произойдет, я не могу пользоваться преимуществами переменных цикла без кастования и потери данных. Следующий код не компилируется в Java:
for (int i = 0, long variable = obj.operation(); i < 15; i++) { ... }
Опять же, кто-нибудь знает, почему существует ограничение этого типа?
Это то, что я хотел. работает и на C/C++. Спасибо! если бы я мог дать +1;) – fjsj
Ответ работает, но использование анонимных блоков, подобных этому, является необычным стилем, я бы не использовал его в своих программах. – Jesper
Я встречаюсь с этим ограничением очень часто, например, когда мне нужно преобразовать Итератор или другую последовательную структуру на основе индекса. Init для цикла for является хорошим местом для размещения переменных, которые необходимы только в контексте этого цикла. Например, это будет хороший цикл для заполнения случайного массива: для (int i = 0, final Random random = new Random(); i
Fixpoint