67
const std::string::size_type cols = greeting.size() + pad * 2 + 2;

なぜstring::size_typeですか?int動作するはずです!それは数字を保持しています!!!

4

3 に答える 3

113

ショートも数字を保持します。signed char と同様です。

ただし、これらの型のいずれも、文字列のサイズを表すのに十分な大きさであるとは保証されていません。

string::size_typeそれだけを保証します。文字列がどんなに大きくても、文字列のサイズを表すのに十分な大きさの型です。

これが必要な理由の簡単な例として、64 ビット プラットフォームを考えてみましょう。int は通常、それらの 32 ビットのままですが、2^32 バイトをはるかに超えるメモリがあります。

したがって、(signed) int を使用すると、2^31 文字を超える文字列を作成できなくなります。ただし、これらのプラットフォームでは size_type は 64 ビット値になるため、より大きな文字列を問題なく表すことができます。

于 2009-07-25T03:06:07.990 に答える
7

ネストされたsize_typetypedefは、STL互換のコンテナー(std::stringたまたまそうです)の要件であるため、ジェネリックコードはサイズを表す正しい整数型を選択できます。

アプリケーションコードで使用しても意味がありませんsize_t。aは完全intに問題ありません(署名されているため、そうではありません。署名付き/署名なしの比較警告が表示されます)。

于 2009-07-25T08:51:37.920 に答える