Namespaces
Variants

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

From cppreference.net
duration & operator = ( const duration & other ) = default ;
(C++11以降)

ある duration の内容を別の 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)を呼び出す。結果の`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); // OK
    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; // OK: 切り捨てなし、暗黙的キャスト
    std::cout << "hours: " << z2_hours.count() << '\n';
}

出力:

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

関連項目

新しいdurationを構築する
(public member function)