Это безопасно, если 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)