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; // 正确,无需类型转换
    z_seconds = z_hours;
    // 首先使用转换构造函数创建`lhs`类型的临时对象。
    // 该构造函数隐式调用转换函数
    // chrono::duration_cast<std::seconds>(z_hours)。生成的`rhs`右值
    // 与`lhs`类型相同,最后通过`operator=`完成赋值操作。
    std::cout << "hours: " << z_hours.count() << '\n';
    std::cout << "seconds: " << z_seconds.count() << '\n';
    z_seconds -= 42s;
//  z_hours = z_seconds; // 编译时错误(符合预期):类型不兼容。
    // 库避免隐式转换以防止潜在的精度损失。
    z_hours = std::chrono::duration_cast<std::chrono::hours>(z_seconds); // 正确
    z_hours = std::chrono::duration_cast<decltype(z_hours)>(z_seconds);  // 同上
    std::cout << "hours: " << z_hours.count() << '\n';
    std::cout << "seconds: " << z_seconds.count() << '\n';
    std::chrono::duration<double, std::ratio<3600>> z2_hours{};
    z2_hours = z_seconds; // 正确,无截断,隐式转换
    std::cout << "hours: " << z2_hours.count() << '\n';
}

输出:

hours: 2
seconds: 7200
hours: 1
seconds: 7158
hours: 1.98833

参见

构造新的 duration 对象
(公开成员函数)