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。