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