「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > C/C++ で `size_t` が署名されていないのはなぜですか: 歴史的な必要性か、それとも現代のバグの磁石か?

C/C++ で `size_t` が署名されていないのはなぜですか: 歴史的な必要性か、それとも現代のバグの磁石か?

2024 年 11 月 16 日に公開
ブラウズ:103

 Why is `size_t` Unsigned in C/C  : A Historical Necessity or a Modern Bug Magnet?

size_t はなぜ符号なしですか?

Bjarne Stroustrup 氏の見解「正の整数を表すためにもう 1 ビットを得るために int の代わりに unsigned を使用するのは、ほとんどの場合良いアイデアではありません」

歴史的起源

もともと、size_t は、DOS システムなどの 16 ビット ポインターを備えたアーキテクチャに対応するために、符号なしで作成されました。文字列サイズの制限を防ぐために、C 標準では、size_t の符号付き対応物である ptrdiff_t を実質的に 17 ビットにすることが義務付けられました。

現在の関連性

これらの歴史的な理由は、組み込みシステムにも依然として当てはまる可能性があります。最近の 32 ビットおよび 64 ビット プログラミングでは、それほど重要ではありません。これらの環境では、数値に符号なし型を使用することに実質的な利点はなく、符号なし型を使用すると、C/C の暗黙的な変換規則 (たとえば、where string("Hi").length()

結論

size_t を unsigned にするという決定は間違いではなく、当時の限られたシステムにとっては実際的な選択でした。ただし、現代のプログラミング実践では、typedef int MyType の自己記述的な性質が有益である特定の状況を除いて、インターフェイスおよび数値での符号なし整数の使用を最小限に抑えることが一般的に推奨されます。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3