const std::string::size_type cols = greeting.size() + pad * 2 + 2;
なぜstring::size_type
ですか?int
動作するはずです!それは数字を保持しています!!!
ショートも数字を保持します。signed char と同様です。
ただし、これらの型のいずれも、文字列のサイズを表すのに十分な大きさであるとは保証されていません。
string::size_type
それだけを保証します。文字列がどんなに大きくても、文字列のサイズを表すのに十分な大きさの型です。
これが必要な理由の簡単な例として、64 ビット プラットフォームを考えてみましょう。int は通常、それらの 32 ビットのままですが、2^32 バイトをはるかに超えるメモリがあります。
したがって、(signed) int を使用すると、2^31 文字を超える文字列を作成できなくなります。ただし、これらのプラットフォームでは size_type は 64 ビット値になるため、より大きな文字列を問題なく表すことができます。
ネストされたsize_type
typedefは、STL互換のコンテナー(std::string
たまたまそうです)の要件であるため、ジェネリックコードはサイズを表す正しい整数型を選択できます。
アプリケーションコードで使用しても意味がありませんsize_t
。aは完全int
に問題ありません(署名されているため、そうではありません。署名付き/署名なしの比較警告が表示されます)。