Ищу по ключу в мапе, обычно всё должно находится, если не найдено — это беда-беда. Хочу кинуть какое-то из стандартных исключений, но что-то не очень понятно, какое лучше всего подходит к данной ситуации
Здравствуйте, m2user, Вы писали:
П>>Пока склоняюсь к range_error
M>Почему именно range_error (std::runtime_error), а не out_of_range (std::logic_error)?
Моё поведение у меня ассоциируется с обращением по недопустимому адресу в ОС, это мне кажется больше похоже на runtime_error, а не logic_error. Хотя, насчет out_of_range тоже подумываю
Хотя, глянул range_error:
Defines a type of object to be thrown as exception. It can be used to report range errors (that is, situations where a result of a computation cannot be represented by the destination type).
И out_of_range:
Defines a type of object to be thrown as exception. It reports errors that are consequence of attempt to access elements out of defined range.
По идее да, надо кидать out_of_range. Но смотрю std::stoull:
Exceptions
std::invalid_argument if no conversion could be performed.
std::out_of_range if the converted value would fall out of the range of the result type or if the underlying function (std::strtoul or std::strtoull) sets errno to ERANGE.
Здравствуйте, пффф, Вы писали:
П>Ищу по ключу в мапе, обычно всё должно находится, если не найдено — это беда-беда. Хочу кинуть какое-то из стандартных исключений, но что-то не очень понятно, какое лучше всего подходит к данной ситуации
Отсутствие ключа в мэпе само по себе не есть исключительная ситуация для кода библиотеки. Это не индекс за пределами длины массива. Поэтому найти подходящее исключение и не удается.
Наиболее логичное ИМХО — свой наследник от runtime_error или logic_error
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Отсутствие ключа в мэпе само по себе не есть исключительная ситуация для кода библиотеки. Это не индекс за пределами длины массива. Поэтому найти подходящее исключение и не удается.
Принимая во внимание то, что концепция range в C++ имеет несколько специфичный смысл, отличный, например, от математического, и что map — это разновидность range, то отсутствие некоторого ключа в мапе вполне может быть квалифицировано как "out of range". И то, что не является исключительной ситуацией для стандартной библиотеки, вполне может оказаться исключительной ситуацией с точки зрения логики пользовательской программы. Но класс исключения я бы завёл всё-таки свой, наверное.
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, пффф, Вы писали:
П>Привет
П>Ищу по ключу в мапе, обычно всё должно находится, если не найдено — это беда-беда. Хочу кинуть какое-то из стандартных исключений, но что-то не очень понятно, какое лучше всего подходит к данной ситуации