SafeInt 函式
SafeInt 程式庫提供幾個您不需要建立 SafeInt 類別的執行個體就能使用的函式。 如果想要保護單一數學運算防止發生整數溢位,就可以使用這些函式。 如果想要保護多個數學運算,則應建立 SafeInt
物件。 建立 SafeInt
物件比多次使用這些函式更有效率。
這些函式可讓您在兩個不同型別的參數上,比較或執行數學運算,不需要先將它們轉換成相同型別。
這些函式每一個都有兩種範本型別:T
和 U
。 每一種型別都可以是布林值、字元或整數型別。 整數型別不一定要帶正負號,且大小從 8 位元到 64 位元均可。
注意
此程式庫的最新版本位於 https://github.com/dcleblanc/SafeInt。
本節內容
函式 | 描述 |
---|---|
SafeAdd | 可將兩個數字相加並防止溢位。 |
SafeCast | 可將某個型別的參數轉換成另一種型別。 |
SafeDivide | 可將兩個數字相除並防止將它們除以零。 |
SafeEquals、SafeGreaterThan、SafeGreaterThanEquals、SafeLessThan、SafeLessThanEquals、SafeNotEquals | 比較兩個數字。 這些函式可讓您比較兩種不同型別的數字,而不需要變更它們的型別。 |
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
。