Noté algunos cambios de redacción en la sección 5.6 para C ++ 11. (Estoy viendo el borrador de la norma C ++ N3242, con fecha 2011-02-28.) La nueva norma (borrador) incluye la oración:
“Para los operandos integrales, el operador / produce el cociente algebraico con cualquier parte fraccionaria descartada”;
Esta statement no se encuentra en 5.6 de la norma 03 (ISO-IEC-14882-2003), pero no creo que esto sea un cambio, ¿verdad? Así es como C y C ++ han funcionado durante años a menos que haya perdido la cabeza (lo que puede haber ocurrido de todos modos).
No te estás volviendo loco.
Una nota a pie de página de 5.6/4
decía:
[C++03 footnote 74]:
Según el trabajo en curso hacia la revisión de ISO C, el algoritmo preferido para la división de enteros sigue las reglas definidas en la norma ISO Fortran, ISO / IEC 1539: 1991, en la cual el cociente siempre se redondea hacia cero.
En C ++ 11, este comportamiento se requiere explícitamente en lugar de ser “preferido”; El cambio está listado en la sección de compatibilidad:
[C++11: C.2.2]:
Cambio: Especifique el redondeo para los resultados de entero/
y%
Fundamento: Aumentar la portabilidad, compatibilidad C99.
Efecto en la característica original: el código válido de C ++ 2003 que usa la división entera redondea el resultado hacia 0 o hacia el infinito negativo, mientras que esta Norma Internacional siempre redondea el resultado hacia 0.
Casi. En C ++ 03, el signo del rest para %
(en el que se especificaron ambos términos) no se especificó, ya que dicho redondeo podría desaparecer de cero en ciertas situaciones también. Compare con el pie de página de C ++ 03:
Según el trabajo en curso hacia la revisión de ISO C, el algoritmo preferido para la división de enteros sigue las reglas definidas en la norma ISO Fortran, ISO / IEC 1539: 1991, en la que el cociente siempre se redondea hacia cero.
En la práctica, sin embargo, esto casi nunca hizo ninguna diferencia.