std::length_error
Определён в заголовочном файле <stdexcept> | ||
|---|---|---|
class length_error; |
Определяет тип объекта, который может быть выброшен в качестве исключения. Он сообщает об ошибках, возникающих при попытке превысить ограничения длины некоторых объектов, определённые реализацией.
Это исключение выбрасывается функциями-членами std::basic_string и std::vector::reserve.
Диаграмма наследования
Функции-члены
|
(constructor) | создаёт новый объект length_error с указанным сообщением (открытая функция-член) |
|
operator= | заменяет объект length_error (открытая функция-член) |
std::length_error::length_error
length_error( const std::string& what_arg ); | (1) | |
length_error( const char* what_arg ); | (2) | |
length_error( const length_error& other ); | (3) | (noexcept начиная с C++11) |
what_arg в качестве поясняющей строки. После создания std::strcmp(what(), what_arg.c_str()) == 0.what_arg в качестве поясняющей строки. После создания std::strcmp(what(), what_arg) == 0.*this и other имеют динамический тип std::length_error, то std::strcmp(what(), other.what()) == 0. Из конструктора копирования не может быть выброшено исключение.Параметры
| what_arg | - | поясняющая строка |
| other | - | другой объект исключения для копирования |
Исключения
std::bad_alloc.Примечания
Поскольку копирование std::length_error не должно приводить к выбрасыванию исключений, это сообщение обычно хранится внутри в виде отдельно выделенной строки со счётчиком ссылок. По этой же причине отсутствует конструктор, принимающий std::string&&: содержимое всё равно пришлось бы копировать.
До принятия решения по вопросу LWG 254 некопирующий конструктор мог принимать только std::string. Для создания объекта std::string это требовало обязательного динамического выделения памяти.
После принятия решения по вопросу LWG 471 производный класс стандартного исключения должен иметь общедоступный конструктор копирования. Он может быть определён неявно, если поясняющие строки, полученные с помощью what(), одинаковы для исходного объекта и его копии.
std::length_error::operator=
length_error& operator=( const length_error& other ); | (noexcept начиная с C++11) |
Присваивает содержимому значения other. Если *this и other имеют динамический тип std::length_error, то после присваивания std::strcmp(what(), other.what()) == 0. Из оператора присваивания копированием не может быть выброшено исключение.
Параметры
| other | - | другой объект исключения, значение которого присваивается |
Возвращаемое значение
*this
Примечания
После принятия решения по вопросу LWG 471 производный класс стандартного исключения должен иметь общедоступный оператор присваивания копированием. Он может быть определён неявно, если поясняющие строки, полученные с помощью what(), одинаковы для исходного объекта и его копии.
Унаследовано от std::logic_error
Унаследовано от std::exception
Функции-члены
|
[virtual] | уничтожает объект исключения (виртуальная открытая функция-член std::exception) |
|
[virtual] | возвращает поясняющую строку (виртуальная открытая функция-член std::exception) |
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применяется к | Поведение согласно опубликованной версии | Правильное поведение |
|---|---|---|---|
| LWG 254 | C++98 | отсутствовал конструктор, принимающий const char* | добавлен |
| LWG 471 | C++98 | поясняющие строки копий std::length_errorопределялись реализацией | они совпадают со строкой исходного объекта std::length_error |
См. также
| изменяет количество хранящихся символов (открытая функция-член std::basic_string<CharT,Traits,Allocator>) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/error/length_error