どのような警告?私が考えることができる最も明白なものは、「変換を狭める」ことです。つまり、に割り当てsize_t
てunsigned int
いるので、情報が失われる可能性があるという警告が表示されます。
に置き換えることの主な欠点は、のすべての可能な値を含むのに十分な大きさが保証されていないことですsize_t
。unsigned long
また、Windows64では十分な大きさではありません。したがって、まだ警告があることに気付くかもしれません。unsigned long
size_t
適切な修正はsize_t
、変数(またはデータメンバー)にを割り当てる場合、変数がの値を含むのに十分な大きさの型を持っていることを確認する必要があるということですsize_t
。それが警告のすべてです。したがって、に切り替えるのではなくunsigned long
、これらの変数をに切り替える必要がありますsize_t
。
逆に、任意のサイズを保持するのに十分な大きさである必要はなく、ちょうど十分な大きさの変数がある場合は、そもそもそれをunsigned int
使用しないでくださいsize_t
。
両方のタイプ(size_t
およびunsigned int
)には有効な使用法があるため、それらのすべての使用法を他のタイプに無差別に置き換えるアプローチは間違っている必要があります:-)実際には、すべてを、またはほとんどのプログラムで問題なく置き換えることがsize_t
できます。例外は、コードが、と同じサイズの符号なしタイプの使用などに依存しているため、より大きなタイプではコードが破損する場合です。uintmax_t
int