Как правильно получить количество тиков продолжительности в C 1x

#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. Это похоже на разницу между устным соглашением о том, что кредит будет возвращен, и обязательным подписанным контрактом. Одно может случиться, может даже быть вероятным. Другое гарантируется, независимо от уровня оптимизации.