ホームページ >バックエンド開発 >C++ >既知の欠点があるにもかかわらず、「size_t」が署名されていないのはなぜですか?

既知の欠点があるにもかかわらず、「size_t」が署名されていないのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-28 09:24:29591ブラウズ

Why is `size_t` Unsigned Despite the Known Drawbacks?

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

質問:

Bjarne Stroustrup は著書の中で次のようにアドバイスしています。正の整数を表すための追加ビットを得るために符号なし整数を使用することに反対します。ただし、配列および文字列のサイズを表すために一般的に使用される型 size_t は符号なしです。これは間違いでしたか、size_t の使用は最小限にすべきでしょうか?

答え:

歴史的な理由により、size_t は署名されていません:

アーキテクチャの制限:

16 ビット ポインターを使用する古いアーキテクチャでは、文字列を 32 KB に制限することは現実的ではありません。これに対処するために、C 標準では、size_t の符号付き対応物である ptrdiff_t の有効範囲が 17 ビットであることが要求されています。

組み込みシステム:

特定の組み込みプログラミングでは

符号なし型の欠点:

しかし、最新の 32 ビットおよび 64 ビット プログラミングでは、符号なし型には大きな欠点があります。 :

  • 暗黙の変換ルール: C と C の暗黙の変換ルールは、予期しない結果を生み出す可能性のある操作や比較を許可するため、符号なし型をバグ アトラクターとして扱います (例: string ("Hi").length() < -3).

結論:

を考慮すると、size_t を unsigned にする決定は間違いではありませんでした。当時の建築上の限界。ただし、現代のプログラミングでは、固有の欠点があるため、数値演算に符号なし型を使用することは強く推奨されません。

以上が既知の欠点があるにもかかわらず、「size_t」が署名されていないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。