2015-10-20 3 views
0

Я хотел заполнить вверх целочисленный массив с 121 Интсом, от 0 до 120. В чем разница между:для выполнения цикла внутри условия цикла, C++

  1. for(int i = 0; i < 122; arr[i] = i, i++){} и
  2. for(int i = 0; i < 122; i++){arr[i] = i;}?

Я проверил его и, кроме warning: iteration 121u invokes undefined behavior, который я думаю, не имеет отношения к моему вопросу, код компилируется нормально и получает ожидаемый результат

EDIT: Спасибо всем, кто обратил внимание на проблему удобочитаемости, это правда конечно, но я хотел посмотреть, есть ли другая интерпретация для этих двух строк, поэтому я проверил обе эти строки в С на сборку, и они выглядят одинаково.

+0

Можете ли вы поместить декларацию arr? –

+0

Считываемость и, следовательно, ремонтопригодность - важный аспект программирования. Какой из них вы считаете более легким для чтения и понимания (и, следовательно, его проще поддерживать)? –

ответ

1

Нет, результат будет таким же. Первая конструкция использует запятую; левая сторона оператора запятой секвенирует до правой стороны, поэтому arr[i] = i, i++ корректно определена

Второго легче читать, хотя, особенно, если один предпочитает опустить {} полностью:

for(int i = 0; i < 122; arr[i] = i, i++); //this ; is evil, don't write such code. 

Кроме того, если вы хотите заполнить 120 элементов, вы должны использовать i < 120.

1

Конечный результат от обеих линий будет таким же , Однако второй лучше, поскольку первый жертвует удобочитаемостью без усиления.

Когда люди читают код, они ожидают, что петли for будут в порядке, которые вы написали во второй строке. Если бы я перешел через код и столкнулся с первой строкой, я бы остановился на секунду, чтобы посмотреть, почему запущен пустой цикл for, а затем понял бы, что вы устанавливаете переменную в цикле for, используя оператор запятой. Прерывает поток при чтении кода, и поэтому не рекомендует его.

Смежные вопросы