Трудно разобраться в вашем вопросе. Я думаю, что вы спрашиваете, имеет ли смысл быть уверенным в отношении области класса (те данные, которые могут быть переданы ему и имеют смысл), и если да, то как быть уверенным.
Первый имеет очень четкий ответ: да, абсолютно. Вы хотите, чтобы ваш класс был «... простым в использовании и трудным в использовании». Это включает в себя проверку того, что клиентам класса сообщают, что они делают что-то не так.
Второй имеет менее четкий ответ. В большинстве случаев вы просто захотите использовать функцию assert () для утверждения функции или домена класса. В других случаях вы захотите выбросить исключение. Иногда вы хотите сделать оба. Когда производительность может быть проблемой, иногда вы хотите предоставить интерфейс, который не делает ни того, ни другого. Обычно вы хотите предоставить интерфейс, по крайней мере, с которым можно проверить, чтобы клиенты могли сказать, что является допустимым / недействительным вводом, прежде чем пытаться передать его вашему классу или функции.
Причина, по которой вы можете захотеть и утверждать, и выбрасывать, заключается в том, что генерирование исключения уничтожает информацию о стеке и может затруднить отладку, но утверждение происходит только во время сборки и фактически ничего не защищает от выполнения вычислений или действий, может вызвать сбои или сделать данные недействительными. Таким образом, утверждение, а затем выбрасывание часто является лучшим ответом, так что вы можете отлаживать его при тестировании, но при этом защищать пользователя, когда эти ошибки попадают на полку.
Для вашего класса вы можете рассмотреть несколько способов обеспечить мин / макс. Одним из них является предоставление функций min / max в интерфейсе класса. Другой может заключаться в использовании внешних функций, и да, numeric_limits может быть просто вещь, поскольку диапазон иногда является типом числового количества. Вы могли бы даже предоставить более общий интерфейс, который имеет функцию validate_input () в вашем классе, чтобы вы могли сделать любое сравнение, которое может быть уместным.
Во второй части вашего вопроса есть много правильных ответов в зависимости от множества переменных, включая личный вкус.