Share via


SafeInt 函式

SafeInt 程式庫提供幾個您不需要建立 SafeInt 類別的執行個體就能使用的函式。 如果想要保護單一數學運算防止發生整數溢位,就可以使用這些函式。 如果想要保護多個數學運算,則應建立 SafeInt 物件。 建立 SafeInt 物件比多次使用這些函式更有效率。

這些函式可讓您在兩個不同型別的參數上,比較或執行數學運算,不需要先將它們轉換成相同型別。

這些函式每一個都有兩種範本型別:TU。 每一種型別都可以是布林值、字元或整數型別。 整數型別不一定要帶正負號,且大小從 8 位元到 64 位元均可。

注意

此程式庫的最新版本位於 https://github.com/dcleblanc/SafeInt

本節內容

函式 描述
SafeAdd 可將兩個數字相加並防止溢位。
SafeCast 可將某個型別的參數轉換成另一種型別。
SafeDivide 可將兩個數字相除並防止將它們除以零。
SafeEqualsSafeGreaterThanSafeGreaterThanEqualsSafeLessThanSafeLessThanEqualsSafeNotEquals 比較兩個數字。 這些函式可讓您比較兩種不同型別的數字,而不需要變更它們的型別。
SafeModulus 可在兩個數字上執行模數運算。
SafeMultiply 可將兩個數字相乘並防止溢位。
SafeSubtract 可將兩個數字相減並防止溢位。
區段​​ 描述
SafeInt SafeInt 類別。
SafeIntException SafeInt 程式庫特定的例外狀況類別。

SafeAdd

可透過防止溢位的方式將兩個數字相加。

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

參數

t
[in] 要相加的第一個數字。 這必須為類型 T。

u
[in] 要相加的第二個數字。 這必須為類型 U。

result
[out] SafeAdd 儲存結果的參數。

傳回值

如果沒有發生錯誤為 true;發生錯誤則為 false

SafeCast

可將某個型別的數字轉換成另一種型別。

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

參數


[in] 要轉換的來源數字。 它必須是 T 型別。


[out] 對新數字型別的參考。 它必須是 U 型別。

傳回值

如果沒有發生錯誤為 true;發生錯誤則為 false

SafeDivide

可透過防止除以零的方式將兩個數字相除。

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

參數

t
[in] 被除數。 這必須為類型 T。

u
[in] 除數。 這必須為類型 U。

result
[out] SafeDivide 儲存結果的參數。

傳回值

如果沒有發生錯誤為 true;發生錯誤則為 false

SafeEquals

比較兩個數字,以判斷它們是否相等。

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

參數

t
[in] 要比較的第一個數字。 這必須為類型 T。

u
[in] 要比較的第二個數字。 這必須為類型 U。

傳回值

true 如果 t u 相等則為 ,否則 false 為 。

備註

因為 == 可讓您比較兩種不同類型的數字,所以此方法會增強 SafeEquals

SafeGreaterThan

比較兩個數字。

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

參數

t
[in] 要比較的第一個數字。 它必須是 T 型別。

u
[in] 要比較的第二個數字。 它必須是 U 型別。

傳回值

true 如果 t 大於 u ,則為 ,否則 false 為 。

備註

SafeGreaterThan 可透過讓您比較兩個不同型別的數字,來延伸一般比較運算子。

SafeGreaterThanEquals

比較兩個數字。

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

參數

t
[in] 要比較的第一個數字。 它必須是 T 型別。

u
[in] 要比較的第二個數字。 它必須是 U 型別。

傳回值

true如果 t 大於或等於 u ,則為 ,否則 false 為 。

備註

SafeGreaterThanEquals 可增強標準比較運算子,因為它可以讓您比較兩個不同型別的數字。

SafeLessThan

可判斷某個數字是否小於另一個。

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

參數

t
[in] 第一個數字。 它必須是 T 型別。

u
[in]第二個數字。 它必須是 U 型別。

傳回值

true如果 t 小於 u ,則為 ,否則 false 為 。

備註

此方法可增強標準比較運算子,因為 SafeLessThan 可以讓您比較兩個不同型別的數字。

SafeLessThanEquals

比較兩個數字。

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

參數

t
[in] 要比較的第一個數字。 它必須是 T 型別。

u
[in] 要比較的第二個數字。 它必須是 U 型別。

傳回值

true如果 t 小於或等於 u ,則為 ,否則 false 為 。

備註

SafeLessThanEquals 可透過讓您比較兩個不同型別的數字,來延伸一般比較運算子。

SafeModulus

可在兩個數字上執行模數運算。

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

參數

t
[in] 除數。 它必須是 T 型別。

u
[in] 被除數。 它必須是 U 型別。

result
[out] SafeModulus 儲存結果的參數。

傳回值

如果沒有發生錯誤為 true;發生錯誤則為 false

SafeMultiply

可透過防止溢位的方式將兩個數字相乘。

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

參數

t
[in] 要相乘的第一個數字。 它必須是 T 型別。

u
[in] 要相乘的第二個數字。 它必須是 U 型別。

result
[out] SafeMultiply 儲存結果的參數。

傳回值

如果沒有發生錯誤為 true;發生錯誤則為 false

SafeNotEquals

判斷兩個數字是否不相等。

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

參數

t
[in] 要比較的第一個數字。 它必須是 T 型別。

u
[in] 要比較的第二個數字。 它必須是 U 型別。

傳回值

true 如果 不是 u 不相等則為 ,否則 false 為 。

備註

因為 != 可讓您比較兩種不同類型的數字,所以此方法會增強 SafeNotEquals

SafeSubtract

可透過防止溢位的方式將兩個數字相減。

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

參數

t
[in] 減法中的第一個數字。 它必須是 T 型別。

u
[in] 要從 t 中減去的數字。 它必須是 U 型別。

result
[out] SafeSubtract 儲存結果的參數。

傳回值

如果沒有發生錯誤為 true;發生錯誤則為 false