Точность из system_clock::time-point
не переносима на разных платформах.Но его можно легко проверить и / или преобразовать с известной точностью, как вы сделали в своем вопросе.
Самый простой способ проверить это - использовать мой date.h header :
#include "date/date.h"
#include <iostream>
int
main()
{
using namespace std;
using namespace std::chrono;
using date::operator<<;
auto start_time = system_clock::now();
auto end_time = system_clock::now();
cout << end_time - start_time << '\n';
}
На gcc это будет выводить что-то вроде:
1730ns
В Windows:
17[1/10000000]s
В macOS:
1µs
Объяснение:
На gcc system_clock::time_point
имеет наносекундную точность, в Windows - 1/10'000'000
(100 нс), а на macOS - микросекундную точность.
Вы можете проверитьточность без заголовка date.h , взглянув на system_clock::duration::period::num
и system_clock::duration::period::den
, которые являются числителем и знаменателем дроби, которая задает длину в долях секунды, которую представляет каждый тик (1 и 10'000'000 в Windows).
Возможность распечатывать длительности с единицами измерения (например, date.h ) в настоящее время включена в черновую спецификацию C ++ 20.