加算、乗算または減算のような任意の演算がオーバーフローを引き起こすことができれば、我々はどのようにチェックしますか?
チェック
答えて
オペランドのサイズを最初に確認し、std::numeric_limits
を使用します。例えば、追加のために:
#include <limits>
unsigned int a, b; // from somewhere
unsigned int diff = std::numeric_limits<unsigned int>::max() - a;
if (diff < b) { /* error, cannot add a + b */ }
あなたは、一般的にかつ確実に後の実際の算術エラーを検出することができない、あなたはすべての前にチェックをしなければならないので。
このアプローチを簡単にテンプレート化して、任意の数値タイプで使用できるようにすることができます。
こんにちは、いくつかのロジックを使用し、この問題を解決するために任意のテンプレートを使用せずに任意のメソッドがありますか? – pravs
私はあなたが 'a + = b; if(a
@pravs: 'std :: numeric_limits
私の質問は特に符号なし整数に向いています – pravs
厳密に言えば、符号なし算術はオーバーフローしません。それはよく定義された方法でラップアラウンドします。しかし、それは単語 "オーバーフロー"の意味についてのちょっとした疑問であり、あなたの質問に答えることはできません。 –