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

履歴 編集

class template
<ratio>

std::ratio_multiply(C++11)

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

処理系

参照