Объясните почему это: for (int i = -1; --i; i >=0); работает не так как это: for (int i = -1; i >=0; --i); хотя при: i >= 0 все ок?
strojtel Imho сравнивать эти циклы не корректно. В верхнем, индекс меняется от -1 до 1 (т.е. -1, -2, ..., INT_MIN, INT_MAX, INT_MAX-1, ..., 1), а нижний вообще не должен выполнять итераций, т.к. результатом проверки условия -1 >= 0 перед первой итерацией является ложь.
strojtel В первом цикле между --i и i >= 0 стоит semicolon, следовательно, условие выполнения очередной итерации цикла - это не равенство нулю результата операции префиксного декремента переменной i, а операция сравнения ни как на цикл не влияет (imho правильный компилятор должен ее игнорировать).
о точно дело в ";" for (int i = -1; --i >=0; ); - работает правильно! спасибо!!! вот интересно с точки зрения оптимизации: 1) for (int i = count(); --i >=0; ); 2) for (int i = count()-1; i >=0; --i); они равнозначны?
strojtel Imho оба варианта не имеют ни какого отношения к оптимизации. Правильный компилятор _обязян_ проигнорировать их (возможно оставив только вызов функции count, вдруг она влияет на глобальные переменные и т.п.), потому что в обоих случаях тело цикла _пустое_, т.к. после закрывающейся скобки сразу следует semicolon. Если заменить в твоем сообщении точку с запятой на многоточие, то я полагаю, что генерируемый код будет одинаков, и по-прежнему не будет иметь ни какого отношения к оптимизации.