boost::numeric_cast

トップページ > 整数と数値型 >

abstract

必要なヘッダ
<boost/cast.hpp>
出来ること
オーバーフローしてたら例外を投げるキャスト
リファレンス
en / jp

sample

#include <iostream>
#include <boost/cast.hpp>
using namespace std;

int main()
{
	using boost::numeric_cast;

	try
	{
		long L = 70000;
		short S = numeric_cast<short>( L );

		cout << "OK: short " << S << endl;
	}
	catch( boost::bad_numeric_cast e )
	{
		cout << "overflow" << endl;
	}

	return 0;
}

例えばshortが16bitの環境では70000はおさまりませんから、 例外が発生します。shortが32bitなら、Sに無事70000が入ります。

etc

普通にキャストすると、キャスト先におさまらなかった部分は捨てられてしまいます。 そうでなくてはみだしてしまったことを検知したいときに、 この numeric_cast が使えます。

presented by k.inaba (kiki .a.t. kmonos.net) under CC0