>= 0 がクラス不変である場合value
、実際にはいくつかの可能性しかありません。1 つは、パラメーターを受け入れるように ctor を作成するunsigned
ことです。そのため、値 <0 は単純に不可能でした。もう 1 つは、例外をスローすることです。
しかし、はい、有効なオブジェクトを作成できない値をユーザーが渡した場合、例外をスローすることは完全に受け入れられます (通常は正しいことです)。コンストラクターの責任は、有効なオブジェクトを作成することです。有効なオブジェクトを作成できない値が渡された場合、通常は例外が正しい応答です。
いつ例外をスローするかについて: 少なくともこの場合は、それほど重要ではありません。例外は現在のオブジェクトの作成をロールバックするため、とにかく存在しません。値をコピーしてから無効な場合は破棄するよりも、最初に値をテストする方がはるかに高速であれば、違いが生じる可能性があります。そのようなものではint
、ほとんど無関係です。たとえば、ある種の大きなツリーがあり、ツリーのルート ノードなどを見るだけでそれが有効かどうかを判断できる場合は、最初にそのノードを調べて、3 つのノードだけをコピーする方がよいでしょう。有効だった場合。
後者は明らかに最適化ですが、プロファイリングを行わなくても価値があるほど十分に大きくシンプルなものになる可能性があります (おそらく、ペシミゼーションを回避するのは最適化ではありません)。