Boost.Multiprecisionの多倍長演算型の演算には、デフォルトで式テンプレートが使用されます。そして、式テンプレートの使用はオフにすることもできます。以下、オフにする例です。
#include <iostream> #include <boost/multiprecision/cpp_dec_float.hpp> namespace mp = boost::multiprecision; using cpp_dec_float_50 = mp::number< mp::cpp_dec_float<50>, // 仮数部は50桁 mp::et_off // 式テンプレートをオフにする >; int main() { cpp_dec_float_50 x = 3.0f; cpp_dec_float_50 y = x * x; std::cout << y << std::endl; }
9
boost::multiprecision::numberの第2テンプレート引数に、et_offを設定します。内部的な演算が変わるだけで、ユーザーコードは変わりません。
Boost.MultiprecisionのFAQには、「式テンプレートをいつ使用すべきか」が書かれています。これによれば、動的メモリ確保を行うようなものは、オブジェクトの生成コストが高いので、式テンプレートを使おう、とのことです。
参照:
number - Boost Multiprecision Library
FAQ - Boost Multiprecision Library