Desde N3376:
20.11.7.1 [time.clock.system] / 1:
Los objetos de clase system_clockrepresentan la hora del reloj de pared del reloj en tiempo real de todo el sistema.
20.11.7.2 [time.clock.staady] / 1:
Los objetos de clase steady_clockrepresentan relojes cuyos valores de time_pointnunca disminuyen a medida que avanza el tiempo físico y cuyos valores de time_pointavance a una tasa constante en relación con el tiempo real. Es decir, es posible que el reloj no se ajuste.
20.11.7.3 [time.clock.hires] / 1:
Los objetos de clase high_resolution_clockrepresentan relojes con el período de tic más corto. high_resolution_clockpuede ser sinónimo de system_clocko steady_clock.
Por ejemplo, el reloj de todo el sistema puede verse afectado por algo como el horario de verano, momento en el que la hora real que aparece en algún momento en el futuro puede ser en realidad una hora del pasado. (Por ejemplo, en los EE. UU., En el otoño el tiempo retrocede una hora, por lo que la misma hora se experimenta "dos veces") Sin embargo, steady_clockno se permite verse afectado por tales cosas.
Otra forma de pensar en "estable" en este caso es en los requisitos definidos en la tabla de 20.11.3 [time.clock.req] / 2:
En la Tabla 59 C1y C2denote los tipos de reloj. t1y t2son valores devueltos por C1::now()donde t1ocurre la devolución de la llamada antes de la devolución de la llamada t2y ambas llamadas ocurren antes C1::time_point::max(). [Nota: esto significa que C1no pasó entre t1y t2. —Nota final]
Expresión: C1::is_steady
Devuelve: const bool
Semántica operativa: truesi t1 <= t2siempre es verdadero y el tiempo entre tics del reloj es constante, en caso contrario false.
Eso es todo lo que tiene el estándar sobre sus diferencias.
Si desea realizar evaluaciones comparativas, su mejor opción probablemente será std::high_resolution_clock, porque es probable que su plataforma utilice un temporizador de alta resolución (por ejemplo, QueryPerformanceCounteren Windows) para este reloj. Sin embargo, si está realizando una evaluación comparativa, debería considerar el uso de temporizadores específicos de la plataforma para su evaluación comparativa, porque las diferentes plataformas manejan esto de manera diferente. Por ejemplo, algunas plataformas pueden brindarle algún medio para determinar el número real de tics de reloj que requiere el programa (independientemente de otros procesos que se ejecutan en la misma CPU). Mejor aún, consigue un generador de perfiles real y úsalo.