std::length_error
Определено в заголовке <stdexcept> | ||
|---|---|---|
class length_error; |
Определяет тип объекта, который должен быть сгенерирован как исключение. Он сообщает об ошибках, возникающих при попытках превысить определённые реализацией пределы длины для некоторых объектов.
Это исключение выбрасывается функциями-членами std::basic_string и std::vector::reserve.
Диаграмма наследования
Функции-члены
| (конструктор) | создаёт новый объект 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) | |
| (3) | ||
length_error( const length_error& other ); | (до C++11) | |
length_error( const length_error& other ) 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. Ни одно исключение не может быть выброшено из конструктора копирования.(до C++11)
Параметры
| what_arg | - | поясняющая строка |
| other | - | другой объект исключения для копирования |
Исключение
std::bad_alloc.Примечания
Поскольку копирование std::length_error запрещено для выброса исключений, это сообщение обычно хранится внутри как отдельная строка с подсчётом ссылок. Это также объясняет, почему нет конструктора, принимающего std::string&&: он всё равно должен был бы скопировать содержимое.
До решения проблемы LWG issue 254, конструктор без копирования мог принимать только std::string. Это делает обязательным динамическое выделение памяти для построения объекта std::string.
После решения проблемы LWG issue 471, производный класс стандартного исключения должен иметь публичный конструктор копирования. Он может быть неявно определён, если поясняющие строки, полученные с помощью what() , идентичны для исходного и скопированного объектов.
std::length_error::operator=
length_error& operator=( const length_error& other ); | (до C++11) | |
length_error& operator=( const length_error& other ) noexcept; | (с C++11) |
Присваивает содержимое, используя содержимое other. Если *this и other оба имеют динамический тип std::length_error, то std::strcmp(what(), other.what()) == 0 после присваивания. Ни одно исключение не может быть выброшено из оператора копирования присваивания.(до C++11)
Параметры
| other | - | другой объект исключения для присваивания |
Возвращаемое значение
*this
Примечания
После решения проблемы LWG issue 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/w/cpp/error/length_error