сравнивая int с size_t - PullRequest
       4

сравнивая int с size_t

37 голосов
/ 04 сентября 2010

Если у меня есть переменная типа int и size_t, могу ли я сравнить их следующим образом:

int i=1;
size_t y=2;
if(i==y)
// do something..

или мне нужно набрать один из них?

Ответы [ 3 ]

55 голосов
/ 04 сентября 2010

Это безопасно, если 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)
0 голосов
/ 04 сентября 2010

Можно сравнить значение size_t со значением int, значение int будет неявно преобразовано в тип unsigned.

Некоторые компиляторы выдают предупреждение при смешиванииsigned и unsigned типы в сравнениях.В этом случае вы можете явно преобразовать значение signed в соответствующий тип unsigned, чтобы подавить предупреждение.

0 голосов
/ 04 сентября 2010

size_t будет неким целочисленным типом (хотя, возможно, и без знака, поэтому может генерировать предупреждение), поэтому соответствующее приведение должно быть выполнено автоматически.

Как уже говорили другие,вы можете захотеть вернуться к любому вычислению, производящему int, и посмотреть, сможете ли вы сделать это в size_t в первую очередь, если вы вычисляете требуемый размер для чего-либо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...