Я пишу библиотеку и задаюсь вопросом, что лучше всего использовать для типов данных, используемых в общедоступном API.
Учитывая функцию
void foo (int bar)
который ожидает индекс для некоторого внутреннего массива/контейнера. Какой это должен быть тип? Поскольку индекс никогда не может быть отрицательным, я мог бы использовать unsigned int или size_t. Или я должен придерживаться простого int и утверждать / бросать, если указано какое-то недопустимое значение?
В общем: следует ли выбирать тип на основе допустимого диапазона данных (например, чтобы избежать отрицательных проверок) или нет?
РЕДАКТИРОВАТЬ: другой пример, предположим, что моя библиотека предоставляет функцию для печати файла. Пользователь может выбрать диапазон страниц для печати:
void print (int page_from, int page_to)