カウント クラス メンバーに符号なし整数を使用する必要がありますか?
答え
たとえば、クラスを想定します
TList <T> = class
private
FCount : Cardinal;
public
property Count : Cardinal read FCount;
end;
それは理にかなっていますね。リストに格納されるアイテムの数を負にすることはできないので、符号なし整数型を使用しないのはなぜですか? 一般的には、可能な限り一般的でない (つまり、最も特殊な) 型を常に使用するのが良い原則だと思います。
リストを反復処理すると、次のようになります。
for I := 0 to List.Count - 1 do
Writeln (List [I]);
リストに格納されているアイテムの数が 0 の場合、コンパイラは次の評価を試みます。
List.Count - 1
これにより、適切な整数オーバーフロー (正確にはアンダーフロー) が発生します。デバッガーが例外が発生した適切な場所を表示しないという事実と相まって、これを見つけるのは非常に困難でした。
オーバーフロー チェックをオフにすると、結果として生じるエラーを追跡するのがさらに難しくなります。これは、自分のものではないメモリにアクセスすることが多くなり、未定義の動作が発生するためです。
このような状況を避けるために、今後はすべてのカウント メンバーにプレーンな整数を使用します。
それが完全にナンセンスである場合は、私に指摘してください:)
(コード内の整数オーバーフローを追跡するのに 1 時間費やしたので、それを共有することにしました。もちろん、ここにいるほとんどの人はそれを知っているでしょうが、おそらく誰かの時間を節約できるでしょう。)