std::chrono::duration<Rep,Period>::operator=
Материал из cppreference.com
<tbody>
</tbody>
duration& operator=( const duration &other ) = default; |
(начиная с C++11) | |
Присваивает содержимое одного duration другому.
Параметры
| other | — | duration для копирования
|
Пример
Запустить этот код
#include <iostream>
#include <chrono>
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 функция-элемент) |