De acuerdo con el estándar de C++, la sección 5.6, párrafo 4:
El binario/operador produce el cociente, y el operador binario% produce el resto de la división de la primera expresión por el segundo. Si el segundo operando de/o% es cero, el comportamiento no está definido; de lo contrario (a/b) * b + a% b es igual a a. Si ambos operandos son no negativos, el resto no es negativo; si no, el signo del resto está definido por la implementación.
Una nota al pie sugiere que se prefiere redondear el cociente hacia cero, lo que dejaría el resto negativo.
Por lo tanto, los enfoques (end - start) % bufferSize
no funcionan de manera confiable. C++ no tiene aritmética modular (excepto en el sentido ofrecido por los tipos integrales sin signo).
El enfoque recomendado por j_random_hacker es diferente, y se ve bien, pero no sé si es una mejora real en la simplicidad o la velocidad. La conversión de un booleano a int es ingeniosa, pero requiere un análisis mental, y ese toque puede ser más costoso que el uso de?:, Dependiendo del compilador y la máquina.
Creo que tienes la versión más simple y la mejor, y yo no la cambiaría.
que se ve bien para mí. La única otra opción es si esto está en una clase y luego mantener el espacio restante en una variable. – LeppyR64