Я предполагаю, что вычисление модуля числа является несколько дорогостоящей операцией, по крайней мере, по сравнению с простыми арифметическими тестами (например, если число превышает длину массива). Если это действительно так, эффективнее ли заменить, например, следующий код:
res = array[(i + 1) % len];
со следующим?
res = array[(i + 1 == len) ? 0 : i + 1];
Первое легче на глаза, но мне интересно, может ли вторая быть более эффективной. Если да, могу ли я ожидать, что оптимизирующий компилятор заменит первый фрагмент вторым, когда используется скомпилированный язык?
Конечно, эта "оптимизация" (если это действительно оптимизация) не работает во всех случаях (в этом случае она работает только в том случае, если i+1
не больше, чем len
).