или, «Объявление нескольких переменных в цикле 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; ...
Кто-нибудь знает почему?Это ограничение для ()?Или ограничение на списки запятых, например, «первый элемент списка запятых может объявлять тип, но не другой? Является ли следующее использование запятых различными синтаксическими элементами C ++?
(A)
for( int i=0, j=0; ...
(B)
int i = 0, j = 0;
(C)
int z;
z = 1, 3, 4;
Есть ли здесь гуру?
==========================================================
На основена хороших ответах, которые я получил, я думаю, что могу уточнить вопрос:
В заявлении for
for( X; Y; Z;) {..... }
Что такое X, Y и Z?
Мой вопрос был о C ++, но у меня нет большой ссылки на C ++. В моей ссылке на C (Harbison and Steele 4th ed, 1995) все они представляют собой три выражения , и мой gcc требует режима C99 дляиспользовать для (int i = 0;
В Stroustrup, с. 6.3, синтаксис оператора for задается как
для операторов (for-init-Statement; условие; выражение)
Так что в C ++ есть специальный синтаксический оператор, посвященный первому предложению в for (), и мы можем предположить, что ониесть особые правила, помимо тех, что для выражения.Этот звук действителен?