次の方法で共有


SafeInt 関数

SafeInt ライブラリには、SafeInt クラスのインスタンスを作成せずに使える関数がいくつか用意されています。 1 つの数値演算を整数のオーバーフローから保護したい場合、これらの関数を使えます。 複数の数値演算を保護したい場合は、SafeInt オブジェクトを作成する必要があります。 これらの関数を複数回使うよりも、SafeInt オブジェクトを作成する方が効率的です。

これらの関数を使うと、2 つの異なる型のパラメーターを比較したり、それらで数値演算を実行したりできます。最初に同じ型に変換する必要はありません。

これらの各関数は、2 つのテンプレート型 TU を持っています。 これらの型にはそれぞれ、ブール値、文字、または整数型を指定できます。 整数型は、符号付きまたは符号なしで、8 ビットから 64 ビットの任意のサイズにすることができます。

Note

このライブラリの最新バージョンは https://github.com/dcleblanc/SafeInt にあります。

このセクションの内容

関数 説明
SafeAdd 2 つの数値を加算し、オーバーフローから保護します。
SafeCast ある型のパラメーターを別の型にキャストします。
SafeDivide 2 つの数値を除算し、ゼロ除算から保護します。
SafeEqualsSafeGreaterThanSafeGreaterThanEqualsSafeLessThanSafeLessThanEqualsSafeNotEquals 2 つの数値を比較します。 これらの関数を使うと、異なる型の 2 つの数値を、その型を変更することなく比較できます。
SafeModulus 2 つの数値に対して剰余演算を実行します。
SafeMultiply 2 つの数値を乗算し、オーバーフローから保護します。
SafeSubtract 2 つの数値を減算し、オーバーフローから保護します。
セクション 説明
SafeInt SafeInt クラスです。
SafeIntException SafeInt ライブラリに固有の例外クラスです。

SafeAdd

オーバーフローから保護される方法で 2 つの数値を加算します。

template<typename T, typename U>
inline bool SafeAdd (
   T t,
   U u,
   T& result
) throw ();

パラメーター

t
[入力] 加算する最初の数値。 これは T 型である必要があります。

u
[入力] 加算する 2 番目の数値。 これは U 型である必要があります。

result
[出力] SafeAdd の結果が格納されるパラメーター。

戻り値

エラーが発生しなかった場合は true。エラーが発生した場合は false

SafeCast

ある型の数値を別の型にキャストします。

template<typename T, typename U>
inline bool SafeCast (
   const T From,
   U& To
);

パラメーター

差出人
[入力] 変換元の数値。 これは T 型である必要があります。

目的
[出力] 新しい数値型への参照。 これは U 型である必要があります。

戻り値

エラーが発生しなかった場合は true。エラーが発生した場合は false

SafeDivide

ゼロ除算から保護される方法で 2 つの数値を除算します。

template<typename T, typename U>
inline bool SafeDivide (
   T t,
   U u,
   T& result
) throw ();

パラメーター

t
[入力] 被除数。 これは T 型である必要があります。

u
[入力] 除数。 これは U 型である必要があります。

result
[出力] SafeDivide の結果が格納されるパラメーター。

戻り値

エラーが発生しなかった場合は true。エラーが発生した場合は false

SafeEquals

2 つの数値を比較し、それらが等しいかどうかを判定します。

template<typename T, typename U>
inline bool SafeEquals (
   const T t,
   const U u
) throw ();

パラメーター

t
[入力] 比較する最初の数値。 これは T 型である必要があります。

u
[入力] 比較する 2 番目の数値。 これは U 型である必要があります。

戻り値

tu が等しい場合は true。それ以外の場合は false

解説

このメソッドでは == が強化されます。SafeEquals を使うと、2 つの異なる型の数値を比較できるためです。

SafeGreaterThan

2 つの数値を比較します。

template<typename T, typename U>
inline bool SafeGreaterThan (
   const T t,
   const U u
) throw ();

パラメーター

t
[入力] 比較する最初の数値。 これは T 型である必要があります。

u
[入力] 比較する 2 番目の数値。 これは U 型である必要があります。

戻り値

tu よりも大きい場合は true。それ以外の場合は false

解説

SafeGreaterThan では通常の比較演算子が拡張され、2 つの異なる型の数値を比較できます。

SafeGreaterThanEquals

2 つの数値を比較します。

template <typename T, typename U>
inline bool SafeGreaterThanEquals (
   const T t,
   const U u
) throw ();

パラメーター

t
[入力] 比較する最初の数値。 これは T 型である必要があります。

u
[入力] 比較する 2 番目の数値。 これは U 型である必要があります。

戻り値

tu よりも大きいか等しい場合は true。それ以外の場合は false

解説

SafeGreaterThanEquals では標準の比較演算子が強化され、2 つの異なる型の数値を比較できます。

SafeLessThan

一方の数値がもう一方の数値よりも小さいかどうかを判定します。

template<typename T, typename U>
inline bool SafeLessThan (
   const T t,
   const U u
) throw ();

パラメーター

t
[入力] 最初の数値。 これは T 型である必要があります。

u
[in] 2 番目の数値。 これは U 型である必要があります。

戻り値

tu よりも小さい場合は true。それ以外の場合は false

解説

このメソッドでは標準の比較演算子が強化されます。SafeLessThan を使うと、2 つの異なる型の数値を比較できるためです。

SafeLessThanEquals

2 つの数値を比較します。

template <typename T, typename U>
inline bool SafeLessThanEquals (
   const T t,
   const U u
) throw ();

パラメーター

t
[入力] 比較する最初の数値。 これは T 型である必要があります。

u
[入力] 比較する 2 番目の数値。 これは U 型である必要があります。

戻り値

tu よりも小さいか等しい場合は true。それ以外の場合は false

解説

SafeLessThanEquals では通常の比較演算子が拡張され、2 つの異なる型の数値を比較できます。

SafeModulus

2 つの数値に対して剰余演算を実行します。

template<typename T, typename U>
inline bool SafeModulus (
   const T t,
   const U u,
   T& result
) throw ();

パラメーター

t
[入力] 除数。 これは T 型である必要があります。

u
[入力] 被除数。 これは U 型である必要があります。

result
[出力] SafeModulus の結果が格納されるパラメーター。

戻り値

エラーが発生しなかった場合は true。エラーが発生した場合は false

SafeMultiply

オーバーフローから保護される方法で 2 つの数値を乗算します。

template<typename T, typename U>
inline bool SafeMultiply (
   T t,
   U u,
   T& result
) throw ();

パラメーター

t
[入力] 乗算する最初の数値。 これは T 型である必要があります。

u
[入力] 乗算する 2 番目の数値。 これは U 型である必要があります。

result
[出力] SafeMultiply の結果が格納されるパラメーター。

戻り値

エラーが発生しなかった場合は true。エラーが発生した場合は false

SafeNotEquals

2 つの数値が等しくないかどうかを判定します。

template<typename T, typename U>
inline bool SafeNotEquals (
   const T t,
   const U u
) throw ();

パラメーター

t
[入力] 比較する最初の数値。 これは T 型である必要があります。

u
[入力] 比較する 2 番目の数値。 これは U 型である必要があります。

戻り値

tu が等しくない場合は true。それ以外の場合は false

解説

このメソッドでは != が強化されます。SafeNotEquals を使うと、2 つの異なる型の数値を比較できるためです。

SafeSubtract

オーバーフローから保護される方法で 2 つの数値を減算します。

template<typename T, typename U>
inline bool SafeSubtract (
   T t,
   U u,
   T& result
) throw ();

パラメーター

t
[入力] 減算の最初の数値。 これは T 型である必要があります。

u
[入力] t から減算する数値。 これは U 型である必要があります。

result
[出力] SafeSubtract の結果が格納されるパラメーター。

戻り値

エラーが発生しなかった場合は true。エラーが発生した場合は false