Re[4]: И кстати! :)
От: PM  
Дата: 05.01.21 11:10
Оценка:
Здравствуйте, 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 и подумать не мог. Лишь бы отловить попытку сравнения яблок с апельсинами на этапе компиляции.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.