#c #chrono
#c #хроно
Вопрос:
Я использую C для разработки своего проекта, и я использовал std::chrono
.
Мне нужно получить количество тиков определенной продолжительности, например, мне может понадобиться целое число 3600
, которое представляет количество секундных тиков в один час.
Чтобы получить это целое число, я могу закодировать, как показано ниже:
int a = 3600; // 1 hour = 3600 sec int b = std::chrono::duration_castlt;std::chrono::secondsgt;(1h).count(); int c = (1h 0s).count();
Очевидно, что каждый из них может дать мне 3600
. Первый довольно прост, но мне лучше добавить несколько комментариев, чтобы избежать магического числа 3600
. Второй вопрос совершенно ясен, но могу ли я сказать, что он действительно слишком длинный? И третий не длинный, и 0s
может 1h
быть преобразован std::chrono::seconds
автоматически, чтобы я мог получить то, что хочу, но сложно ли это?
Итак, не могли бы вы, пожалуйста, сказать мне, какой из них является лучшим с точки зрения современного C или есть ли какой-либо код лучше, чем мой?
Комментарии:
1. Это вопрос, основанный на мнении. «Лучшего» не существует, пока вы не определите некоторые критерии оценки. Например, второе решение является «лучшим», потому что оно наиболее читаемо/понятно, но третье — «лучшее», так как оно самое короткое.
2.
auto sec = std::chrono::seconds(1h).count();
3. @DanielLangr Ну, я не читал исходный код
chrono
, но, как я знал, он довольно легкий. Поэтому нам не нужно заботиться о производительности. Так что «лучше всего» здесь именно то, что вы сказали: читабельно/понятно, понятно.4.
std::chrono::duration_cast
это необходимо только при переходе к типу с более низкой точностью, если нет потери точности, которую вы можете просто построить напрямую. Напримерstd::chrono::hours(1s)
, не работает, ноstd::chrono::seconds(1h)
делает5. Это похоже на разницу между устным соглашением о том, что кредит будет возвращен, и обязательным подписанным контрактом. Одно может случиться, может даже быть вероятным. Другое гарантируется, независимо от уровня оптимизации.