• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    class template
    <ratio>

    std::ratio_multiply

    namespace std {
      template <class R1, class R2>
      using ratio_multiply = ;
    }
    

    概要

    ratio_multiplyは、左辺のratioと右辺のratioを乗算したratio型を作るエイリアステンプレートである。

    効果

    乗算結果は、ratio<R1::num * R2::num, R1::den * R2::den>という型になる。

    実装によっては、演算アルゴリズムによってオーバーフローが起こる可能性がある。オーバーフローが起こった場合、プログラムは不適格となる。

    #include <ratio>
    
    int main()
    {
      using r1 = std::ratio<2, 5>;
      using r2 = std::ratio<3, 5>;
    
      using result = std::ratio_multiply<r1, r2>;
    
      static_assert(result::num == 6, "result num is 6");
      static_assert(result::den == 25, "result den is 25");
    }
    

    出力

    乗算で大きいduration型を定義する例

    #include <iostream>
    #include <ratio>
    #include <chrono>
    
    int main()
    {
        // 「86400秒」という直値で「日」を定義する代わりに、
    //  using days = std::chrono::duration<long, std::ratio<86400>>;
    
        // 「時」を24倍して「日」を定義する
        using days = std::chrono::duration<
            long,
            std::ratio_multiply<
                std::chrono::hours::period,
                std::ratio<24>
            >
        >;
    
        days three(3);
    
        std::cout << three.count() << std::endl;
    }
    

    出力

    3
    

    バージョン

    言語

    • C++11

    処理系

    参照