¿Cuál es la diferencia entre las opciones del compilador / Ox y / O2?

Compilador C ++ de Microsoft cl.exe, como se incluye con Visual Studio) ofrece varios interruptores de optimización. La diferencia entre la mayoría de ellos parece explicarse por sí misma, pero no me queda claro cuál es la diferencia entre/O2 (que optimiza el código para la velocidad máxima) y/Ox (que selecciona "optimización completa").

He intentado leer eldocumentació Para el/Ox, y parece confirmar que este interruptor también permite optimizaciones para la velocidad máxima, en lugar del tamaño:

Los/Oxa opción del compilador @ produce código que favorece la velocidad de ejecución en un tamaño más pequeño.

Pero en particular, la siguiente declaración en la sección "Comentarios" me llamó la atención:

En general, especifique/O2 (Maximizar velocidad) en lugar de/Ox.

Entonces mi pregunta es,por qué debería uno generalmente favorecer/O2 encima/Ox? ¿La última opción permite una optimización particular que se sabe que causa errores imprevistos o comportamientos inesperados? ¿Es simplemente que la cantidad de optimización que se gana no vale el tiempo de compilación adicional? ¿O es solo una "recomendación" completamente sin sentido como resultado del hecho de que/O2 es eldefect opción en VS?

Respuestas a la pregunta(2)

Su respuesta a la pregunta