или "Объявление нескольких переменных в цикле for ist verboten"?!
Мой исходный код был
for( int i = 1, int i2 = 1;
i2 < mid;
i++, i2 = i * i ) {
Я хотел пропустить первый так много квадратов и хотел как числа, так и его квадрата, а условие остановки зависело от квадрата. Этот код кажется самым чистым выражением намерения, но он недействителен. Я могу думать о дюжине способов обойти это, поэтому я не ищу лучшей альтернативы, но для более глубокого понимания того, почему это недействительно. Немного языковой адвокации, если хотите.
Я достаточно взрослый, чтобы помнить, когда вам приходилось объявлять все свои переменные в начале функции, поэтому я ценю
for( int i = 0; ....
синтаксис. Чтение вокруг этого похоже, что вы можете иметь только одно объявление типа в первом разделе инструкции for(). Таким образом, вы можете сделать
for( int i=0, j=0; ...
или даже немного барокко
for( int i=0, *j=&i; ...
но не для разумного
for( int i=0, double x=0.0; ...
Кто-нибудь знает, почему? Это ограничение для()? Или ограничение на списки запятой, например "первый элемент списка запятой может объявлять тип, но не другой? Являются ли следующие виды использования запятых различными синтаксическими элементами С++?
(А)
for( int i=0, j=0; ...
(В)
int i = 0, j = 0;
(С)
int z;
z = 1, 3, 4;
Любые гуру?
=============================================== =====
Основываясь на хороших ответах, которые я получил, я думаю, что могу заострить вопрос:
В инструкции for
for( X; Y; Z;) {..... }
что такое X, Y и Z?
Мой вопрос был о С++, но у меня нет отличного С++ refrence. В моей ссылке C (Harbison and Steele 4th ed, 1995) все три выражения , и мой gcc требует использования режима C99 для (int я = 0;
В Stroustrup, с. 6.3, синтаксис for for задается как
for (for-init-statement; condition; expression) statements
Итак, у С++ есть специальный синтаксический оператор, посвященный первому предложению for(), и мы можем предположить, что у них есть специальные правила, отличные от тех, которые используются для выражения. Правильно ли это звучит?