Здравствуйте, B0FEE664, Вы писали:
BFE>Здравствуйте, rg45, Вы писали:
BFE>>>Это ещё ерунда. А вот то, что авторы не догадались ввести объект std::chrono::zero — вот это абсурд достойный Рина незнавшего нуля. Вот как сравнить std::chrono::duration с нулём?
Строгая тизпизация — это хорошо, в C++ и так слишком много неявных нулей:
Is Zero a Butterfly?
| TLDR |
| |
| |
Можно сравнивать со значением, сконструированным из литерала, например 0s:
#include <chrono>
int main()
{
using namespace std::literals::chrono_literals;
const auto d = 3s;
const bool b1 = (d > 0s);
const bool b2 = (d == 0ns);
}
R>>Алле-оп!
R>>https://en.cppreference.com/w/cpp/chrono/duration/zero
BFE>
BFE>Почему значение 0 зависит от Rep и Period ?:
BFE>BFE>std::chrono::duration<Rep,Period>::zero()
BFE>
Предполагаю, что для облегчения написания шаблонного кода, где Duration может быть любым типом.
BFE>И как этим пользоваться?
BFE>BFE>const auto diff_time = time1 - time2;
BFE>if ( diff_time.zero() < diff_time )
BFE>{
BFE>}
BFE>
BFE>Так?
BFE>BFE>if ( decltype(diff_time)::zero() < diff_time )
BFE>{
BFE>}
BFE>
BFE>Или так?
BFE>Или, может быть, так, с указанием типа для тиков:
BFE>BFE>if ( std::chrono::duration<std::chrono::seconds::rep>::zero() < diff_time )
BFE>{
BFE>}
BFE>
BFE>Или просто сравниваем с точностью до секунды?:
BFE>BFE>if ( std::chrono::seconds::zero() < diff_time )
BFE>{
BFE>}
BFE>
BFE>Ведь если так сделано, то наверное не просто так, наверное сравнение diff_time с std::chrono::seconds::zero() и с std::chrono::milliseconds::zero() должно чем-то различаться? Иначе какой в этом смысл?
Это же C++, можно любым из указанных выше и наверно еще несколькими более странными, про которые автор chrono и подумать не мог. Лишь бы отловить попытку сравнения яблок с апельсинами на этапе компиляции.