int
次のように変数とを比較できますかsize_t
:
int i = 1;
size_t y = 2;
if (i == y) {
// Do something
}
それとも、そのうちの 1 つを型キャストする必要がありますか?
ベストアンサー1
がゼロまたは正であれば安全ですint
。 が負で、 とsize_t
同等かそれ以上のランクである場合int
、int
は に変換されsize_t
、その負の値は正の値になります。次に、この新しい正の値が 値と比較されますがsize_t
、(驚くほどあり得ない偶然ですが)偽陽性になる可能性があります。本当に安全(そしておそらく過剰に用心深い)にするには、まず が負でないことを確認しますint
。
/* given int i; size_t s; */
if (i>=0 && i == s)
コンパイラの警告を抑制するには:
if (i>=0 && (size_t)i == s)