2015-10-19 9 views
4

chrono::steady_clock состоит из 4-х элементов: rep, period, duration и timepoint.Как определяется тип и тип хронологии :: constant_clock?

chrono::steady_clock::duration является chrono::duration<rep,period>. chrono::steady_clock::period - ratio.

Как определяются типы chrono::steady_clock::duration и chrono::steady_clock::period?

Например,

chrono::steady_clock::duration может быть chrono::duration<int,period>, где период ratio<1,1000>

или

chrono::steady_clock::duration может быть chrono::duration<double,period>, где период ratio<1,1000000>.

ответ

3

rep и period не указаны стандартом. Каждая стандартная реализация библиотеки может выбирать свои собственные. Если базовые вызовы времени, которые они используют, имеют точность 100 нс, выбор периода std::ratio<100, 1000000000> кажется хорошей идеей.

Есть несколько requirements, которые должны удовлетворять этим типам, но это в значительной степени зависит от реализации.

duration всегда только на основе rep и period ... std::chrono::duration<rep, period>

+0

Итак, если я использую Visual Studio, и я использую '#include ', означает ли это, что' chrono' реализован Microsoft? – user3731622

+1

Для std :: chrono :: clocks требуется время_почта/продолжительности на основе подписанных интегральных типов, диапазон которых не менее +/- 292 года. Это требование не ставится на программируемые часы. –

+1

@ пользователь3731622 да – David

2

chrono::steady_clock состоит из типов 4 членов: rep, period, duration и timepoint.

chrono::stead_clock::duration является chrono::duration<rep,period>. chrono::steady_clock::period - ratio.

Да.

Как типы chrono::stead_clock::duration и chrono::steady_clock::period определяется?

Они несколько специфичны для реализации, но между этими типами существуют ограничения и инварианты.

1.rep должен быть довольно хорошо подобранным арифметическим типом. Он должен иметь конструктор по умолчанию, конструктор копирования, назначение копии и имеет не удивительную семантику и не генерирует исключений. Стандарт de facto заключается в том, что все steady_clock::rep имеют встроенные 64-битные типы.

2.period в значительной степени в воздухе. При этом VS, libstdC++ и libC++ имеют steady_clock::period, установленный в nano.

3.duration должны иметь очень специфические отношения к rep и period: is_same<duration, chrono::duration<rep, period>>{} является true_type. Неважно, если вы сначала укажете duration и выведите rep и period из этого, или наоборот. Но инвариант должен иметь место.

4.time_point должно быть экземпляром std::chrono::time_point с продолжительностью duration. Неизвестно, что такое часы time_point. Однако какой тип это часы, он должен иметь ту же эпоху, что и steady_clock. Это, возможно, дефект и должно иметь ограничение, что steady_clock::time_point::clock - steady_clock. Стандарт де-факто заключается в том, что это ограничение имеет место.