Пространства имён
Варианты
Действия

std::chrono::duration<Rep,Period>::duration

Материал из cppreference.com
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм (C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования (C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
 
 
<tbody> </tbody>
constexpr duration() = default;
(1) (начиная с C++11)
duration( const duration& ) = default;
(2) (начиная с C++11)
template< class Rep2 > constexpr explicit duration( const Rep2& r );
(3) (начиная с C++11)
template< class Rep2, class Period2 > constexpr duration( const duration<Rep2,Period2>& d );
(4) (начиная с C++11)

Создаёт новый duration из одного из нескольких дополнительных источников данных.

1) Конструктор по умолчанию создаётся по умолчанию.
2) Конструктор копирования создаётся по умолчанию (делает побитовую копию счётчика тиков).
3) Создаёт duration с r тактами. Обратите внимание, что этот конструктор участвует в разрешении перегрузки только в том случае, если const Rep2& (тип аргумента) неявно преобразуется в rep (тип тиков этого duration) и
  • std::chrono::treat_as_floating_point<rep>::value равно {co|true}}, или
  • std::chrono::treat_as_floating_point<Rep2>::value равно {co|false}}.
(то есть duration с целым числом тактов не может быть построен из значения с плавающей запятой, но duration с числом тактов с плавающей запятой может быть построен из целочисленного значения)
4) Создаёт duration путём преобразования d в соответствующий период и количество тактов, как если бы std::chrono::duration_cast<duration>(d).count(). Чтобы предотвратить усечение во время преобразования, этот конструктор участвует в разрешении перегрузки только в том случае, если вычисление коэффициента преобразования (с помощью std::ratio_divide<Period2, Period>) не переполняется и:
  • std::chrono::treat_as_floating_point<rep>::value == true
или оба:
  • std::ratio_divide<Period2, period>::den == 1 и
  • std::chrono::treat_as_floating_point<Rep2>::value == false.
(то есть либо duration использует тики с плавающей запятой, либо Period2 точно делится на период)

Параметры

r счётчик тиков
d длительность для копирования

Пример

В следующем коде показано несколько примеров (как допустимых, так и недопустимых) построения длительности:

#include <chrono>
int main()
{
    std::chrono::hours h(1); // один час
    std::chrono::milliseconds ms{3}; // 3 миллисекунды
    std::chrono::duration<int, std::kilo> ks(3); // 3000 секунд

    // ошибка: treat_as_floating_point<int>::value == false,
    // Эта длительность позволяет подсчитывать только целые тики
//  std::chrono::duration<int, std::kilo> d3(3.5);

    // Часы 30 Гц с использованием дробных тиков
    std::chrono::duration<double, std::ratio<1, 30>> hz30(3.5);

    // 3000 микросекунд, построенных из 3 миллисекунд
    std::chrono::microseconds us = ms;
    // ошибка: 1/1000000 не делится на 1/1000
//  std::chrono::milliseconds ms2 = us
    std::chrono::duration<double, std::milli> ms2 = us; // 3.0 миллисекунды
}

Отчёты о дефектах

Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:

Номер Применён Поведение в стандарте Корректное поведение
LWG 3050 C++11 ограничение конвертируемости использовало неконстантное xvalue вместо этого используются константные
значения lvalue

Смотрите также

присваивает содержимое
(public функция-элемент) [править]