整数型の表現範囲は<climits>で定義されるINT_MAXやINT_MINのようなマクロを使えば取得することができます。ところがこの方法では、型ごとに異なるマクロを使わないといけません。そのため、テンプレート仮引数で与えられた型の最大値や最小値を取得しようとすると型スイッチが必要になります。
C++ではnumeric_limitsクラステンプレートが用意されていますので、その静的メンバ関数であるmaxまたはminを使えばこの問題は解決します。
0 1 2 3 |
std::numeric_limits<type>::min() std::numeric_limits<type>::max() |
C++11からこれらの静的メンバ関数はconstexprになりました。これにより、前処理以外のほとんどの文脈で使えるようになりました。
使用例:
0 1 2 3 4 5 6 7 |
cout << "long 型の値の範囲は" << numeric_limits<long>::min() << "~" << numeric_limits<long>::max() << endl; cout << "unsigned long 型の値の範囲は" << numeric_limits<unsigned long>::min() << "~" << numeric_limits<unsigned long>::max() << endl; |
※ std::は省略しています。