Определены ли сообщения, созданные стандартными библиотечными исключениями? - PullRequest
0 голосов
/ 17 ноября 2018

std::vector::at выдает std::out_of_range, если запрошенное значение находится вне диапазона контейнера.

Для конструктора std::out_of_range требуется строка, к которой можно получить доступ через .what() при перехватеисключение.

Но я никогда не видел ничего написанного о том, что на самом деле должно быть в этом сообщении.Это может быть полезно знать, по крайней мере, по двум причинам:

  • Я могу захотеть показать это сообщение пользователю, например, при запуске с включенными параметрами отладки.Тогда полезно знать, есть ли какие-либо ограничения на длину, язык, набор символов и т. Д.
  • Я мог бы захотеть использовать std::out_of_range в своем собственном классе, если он достаточно похож на стандартный контейнер,и вернуть сообщение, соответствующее формату, используемому в стандартной библиотеке.

Это определено в стандарте?Если нет, то определяется ли , а не ?

1 Ответ

0 голосов
/ 17 ноября 2018

Я искал n4659 (ранняя версия c ++ 17).

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

Iне видел гарантии, что строка будет пригодна для печати, хотя я подозреваю, что во всех реализациях они будут:

http://www.open -std.org / jtc1 / sc22 / wg21 / docs / paper /2017 / n4659.pdf

...