Существует различие между знанием времени и знанием правильного времени .
Если такое устройство включено, оно может свободно предполагать, что его счетчик тактов ЦП(или любой другой степени steady_clock
) представляет количество циклов со времени UNIX.То есть можно предположить, что он был включен в момент эпохи UNIX.Это будет действительная реализация system_clock
.Это время, вероятно, не будет правильным в некотором абсолютном смысле, но это будет соответствующая реализация C ++ 20.
Стандарт просто требует, чтобы эпоха system_clock
была временем UNIX (или, более конкретно, мыМожно все предположить, что это время UNIX).Это не означает, что количество тиков, полученное для часов, гарантированно будет глобально точным текущим временем.В конце концов, пользователь технически может изменить текущее время, которое должно быть отражено в system_clock
(поэтому не обязательно быть постоянными часами).
Какнапример, вы никогда не сможете предположить, что system_clock
точно представляет текущее время;это только то, что операционная среда считает текущим временем.Таким образом, у chrono
нет возможности объяснить, что текущее время является или не является «правильным» в некотором смысле.
system_clock
в основном предназначено для предоставления того, что ближе всего к правильному времени-день, который система может предоставить или понять.Если лучшее, что может сделать система, это предположить, что устройство было включено в эпоху UNIX, то это то, что вы получаете.
Более того, начиная с system_clock
(и все <chrono>
в этом отношении)отсутствует в списке автономных требований , реализации C ++ для таких устройств могут быть автономными реализациями.И поэтому они решают вообще не реализовывать system_clock
(или все <chrono>
).