У меня есть два вопроса относительно операторов сравнения в C++:Операторы сравнения в C++
- Когда зацикливание, какой из двух способов является более эффективным (тип
mdata
иmfirst_free
являетсяdouble*
, тоже):
for (double *p = mdata; p < mfirst_free; ++p) { .. }
for (double *p = mdata; p != mfirst_free; ++p) { .. }
Я догадываюсь, что тот же ответ верен для всех примитивных типов - int
, double
и указателей. Правильно?
Я знаю, что версия <
более безопасна, потому что если я как-то начну с большего указателя, чем ожидалось, это не будет бесконечным циклом. Но, когда я уверен, что я не получу недопустимый ввод, какая версия более эффективна?
- При переопределении операторов сравнения в моих собственных классах существуют ли наиболее эффективные комбинации, и существует ли минимальная требуемая (или рекомендуемая) комбинация для вывода остальных?
Давайте рассмотрим гипотетическую ситуацию, пытаясь сэкономить каждый процессорный цикл - каковы наилучшие варианты? Есть ли другие, которые являются более элегантными?
Я сравниваю указатели на двойниках, а не сам по себе. Это цикл по массиву двойников, не сохраняя границ как целые числа, но и как указатели. – tbukic
Жаль, что я этого не заметил. Но все же, я не думаю, что вопрос о том, что эффективнее, бесполезен. Вы должны проверить сгенерированный код сборки для каждого из ваших вариантов. –
Что касается второго вопроса: (1) Я думаю, вы имеете в виду «эффективный», а не «эффективный», и (2) во многом зависит от того, используете ли вы библиотечные средства, такие как стандартная библиотека C++, которые основаны на неясных причинах используя 'operator <' вместо 'compare'. –