В примере на http://en.cppreference.com/w/cpp/chrono значение секунд получается в double
, Это поведение, которое я хочу. Тем не менее, это, кажется, полагается на неявное предположение, что вычитание временной точки дает значение, которое представляет секунды. Я не могу найти ничего, что объясняет, почему длительность дает числа с плавающей запятой, когда единицы времени фактически не указаны. Без использования auto
вообще, может кто-то показать, как явно получить единицу времени, например, секунды, в типе с плавающей запятой, или указать мне на документацию или объяснение, почему вышеупомянутое преобразование представляет секунды?
Рассматриваемое преобразование по существу:
std::chrono::time_point<std::chrono::system_clock> start = std::chrono::system_clock::now();
std::chrono::time_point<std::chrono::system_clock> end = std::chrono::system_clock::now();
std::chrono::duration<double> elapsed_seconds = end-start; // why does this represent seconds as opposed to some other time unit?
double secondsInDouble = elapsed_seconds.count();
Смотрите следующие посты для примеров преобразования.
Как получить длительность, в виде миль и секунд с плавающей точкой от <хроно>?
C ++ chrono — получает длительность как float или long long
Согласно этому: http://en.cppreference.com/w/cpp/chrono/duration коэффициент по умолчанию для второго параметра шаблона 1:1
смысл секунд.
Другие значения являются отношениями относительно этого. Например, соотношение для std::chrono::milliseconds
является 1:1000
http://en.cppreference.com/w/cpp/numeric/ratio/ratio
Итак, это утверждение:
std::chrono::duration<double> elapsed_seconds = end-start;
эквивалентно:
std::chrono::duration<double, std::ratio<1>> elapsed_seconds = end-start;
Который определяется как секунды, из которых получены все остальные соотношения.
Какими бы ни были единицы end - start
определены в преобразуются в std::ratio<1>
как в секунд.
Если вы хотите время в миллисекундах, вы можете сделать:
std::chrono::duration<double, std::ratio<1, 1000>> elapsed_milliseconds = end-start;
А также end - start
следует перевести в соответствии с новым соотношением.
Других решений пока нет …