最終更新日時:
が更新

履歴 編集

type-alias
<ratio>

std::ratio_subtract(C++11)

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

概要

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

効果

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

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

#include <ratio>

int main()
{
  using r1 = std::ratio<3, 5>;
  using r2 = std::ratio<2, 5>;

  using result = std::ratio_subtract<r1, r2>;

  static_assert(result::num == 1, "result num is 1");
  static_assert(result::den == 5, "result den is 5");
}

出力

バージョン

言語

  • C++11

処理系

参照

  • LWG Issue 921. Rational Arithmetic should use template aliases
    • C++11で、ratioの算術演算がクラステンプレートからエイリアステンプレートへ改められ、ratioにネストされた型typeが追加された。演算結果が既約化されたratioそのものとして扱えるようにするため
  • LWG Issue 948. ratio arithmetic tweak
    • C++11で、処理系がオーバーフローを避けるために別のアルゴリズムを使ってよいこと、オーバーフローが起きた場合は診断が必要であることが明記された