Вы должны использовать любой из <
, <=
, !=
и т. Д., Который наилучшим образом выражает логику вашего приложения, но если нет причин предпочитать какой-либо конкретный стиль, будьте последовательны. При информировании об этом решении операторы <
и !=
имеют преимущество, заключающееся в возможности сравнения индексов на основе 0 и значений sizeof
или STL-стиля size
/ length
, например:
for (size_t i = 0; i < my_vector.size(); ++i)
...
Операторы <
и <=
иногда защищают от увеличения после завершающего значения (если у вас есть другое условие внутри цикла, в котором вы увеличиваете / добавляете i
, или есть некоторое округление с плавающей запятой / несоответствие представлений). На самом деле это не часто важно, но сохранение случайной ошибки лучше, чем ничего.
Учитывая, что «<» является пересечением этих двух множеств, это популярный выбор. На мой взгляд, <code>< также сообщает о состояниях, в которых работает цикл ... более позитивное утверждение, чем стиль !=
. В общем, отрицательные утверждения не приветствуются в программировании (например, bool invalid
сложнее надежно разобраться с головой, чем bool valid
, особенно в сложных логических выражениях и при введении двойных отрицаний).
Это конечно для числовых типов. Другие типы могут подразумевать другие стили ... например, использование != sentinel
. Я предпочитаю, чтобы выбор оператора помогал задокументировать эти последствия использования типа, хотя это личный выбор и, возможно, излишний.
В противном случае преинкремент может быть более эффективным для сложных типов, чем пост-, поскольку он избегает временного.