Namespaces
Variants

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

From cppreference.net
duration & operator = ( const duration & other ) = default ;
(начиная с C++11)

Присваивает содержимое одного duration другому.

Параметры

другой - duration для копирования

Пример

#include <chrono>
#include <iostream>
int main()
{
    using namespace std::chrono_literals;
    std::chrono::hours z_hours{};
    std::chrono::seconds z_seconds{};
    z_hours = 2h; // ok, преобразование не требуется
    z_seconds = z_hours;
    // Сначала используется преобразующий конструктор для создания временного объекта типа `lhs`.
    // Этот конструктор неявно вызывает функцию приведения
    // chrono::duration_cast<std::seconds>(z_hours). Полученное rvalue `rhs`
    // имеет тот же тип, что и `lhs`, и `operator=` в конечном итоге выполняет присваивание.
    std::cout << "часы: " << z_hours.count() << '\n';
    std::cout << "секунды: " << z_seconds.count() << '\n';
    z_seconds -= 42s;
//  z_hours = z_seconds; // ошибка компиляции (что правильно): несовместимые типы.
    // Библиотека избегает неявного приведения для предотвращения потенциальной потери точности.
    z_hours = std::chrono::duration_cast<std::chrono::hours>(z_seconds); // ok
    z_hours = std::chrono::duration_cast<decltype(z_hours)>(z_seconds);  // аналогично
    std::cout << "часы: " << z_hours.count() << '\n';
    std::cout << "секунды: " << z_seconds.count() << '\n';
    std::chrono::duration<double, std::ratio<3600>> z2_hours{};
    z2_hours = z_seconds; // ok, без усечения, неявное приведение
    std::cout << "часы: " << z2_hours.count() << '\n';
}

Вывод:

часы: 2
секунды: 7200
часы: 1
секунды: 7158
часы: 1.98833

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

создаёт новый duration
(public member function)