Неверное значение для size_t - PullRequest
       12

Неверное значение для size_t

8 голосов
/ 14 сентября 2009

Что люди используют для обозначения, что size_t является недействительным? -1 не работает, и 0 может быть допустимым размером.

Ответы [ 5 ]

10 голосов
/ 14 сентября 2009

Возможно ((size_t)-1)?

Строго говоря, - это действительный размер, но если у вас есть этот, вам вряд ли понадобится другой; -)

4 голосов
/ 14 сентября 2009

Если вы говорите о std :: string, то недопустимым значением size_t является std :: string :: npos. Обычно вы не должны использовать -1, потому что size_t без знака, и вы можете получить неудачные сравнения на компиляторе, выполняющем неявные преобразования между типами.

При этом npos std :: strings устанавливается в 0XFFFFFFFFFFFFFFFF ... что является двоичным эквивалентом -1. Также оценивается максимально допустимое значение для поля без знака size_t.

3 голосов
/ 14 сентября 2009

В принципе нельзя. Какое бы значение вы ни использовали, оно может быть действительным. Лучше передайте флаг о том, что он недействителен.

1 голос
/ 10 мая 2016

Моя версия:

#include <limits>
#define invalid_index std::numeric_limits<size_t>::max()
1 голос
/ 14 сентября 2009

И что вы делаете, чтобы обозначить, что int является недействительным? -1 является допустимым значением для int. Эти типы не имеют обозначенных «недопустимых» значений. Вы можете решить выбрать определенное значение (которое обычно не может быть значением того, что представляет ваша переменная), чтобы представлять недопустимое значение, но это ваше собственное определение, а не то, что люди обычно используют.

Лично мне не нравится этот способ. Я предпочитаю создать другую переменную, bool IsValid, которая скажет, является ли значение этой переменной size_t допустимым. Иногда может быть даже лучше создать класс для их инкапсуляции.

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