Пространства имён
Варианты
Действия

std::length_error

Материал из cppreference.com
< cpp‎ | error
 
 
Библиотека диагностики
Обработка исключений
Сбои обработки исключений
(до C++17*)
(до C++17*)
(C++11)(до C++17*)    
(до C++17*)
Коды ошибок
Коды ошибок
Категории исключений
length_error
(ТС TM)
Поддержка системных ошибок
(C++11)
(C++11)
Утверждения
Трассировка стека
 
Определено в заголовочном файле <stdexcept>
class length_error;

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

Это исключение бросается функциями-элементами std::basic_string и std::vector::reserve.

cpp/error/exceptioncpp/error/logic errorstd-length error-inheritance.svg

Диаграмма наследования

Содержание

[править]Функции-элементы

(конструктор)
создаёт новый объект length_error с заданным сообщением
(public функция-элемент)
operator=
заменяет объект length_error
(public функция-элемент)

std::length_error::length_error

length_error(conststd::string& what_arg );
(1)
length_error(constchar* what_arg );
(2)
(3)
length_error(const length_error& other );
(до C++11)
length_error(const length_error& other )noexcept;
(начиная с C++11)
1) Создаёт объект исключения с what_arg в качестве пояснительной строки. После создания std::strcmp(what(), what_arg.c_str())==0.
2) Создаёт объект исключения с what_arg в качестве пояснительной строки. После создания std::strcmp(what(), what_arg)==0.
3) Конструктор копирования. Если *this и other имеют динамический тип std::length_error, тогда std::strcmp(what(), other.what())==0. Исключения не могут быть сгенерированы из конструктора копирования.(до C++11)

Параметры

what_arg пояснительная строка
other другой объект исключения для копирования

Исключения

1,2) Может генерировать 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 );
(до 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 проблема 471, производный стандартный класс исключения должен иметь общедоступный оператор присваивания копированием. Его можно определить неявно, если поясняющие строки, полученные с помощью what(), одинаковы для исходного объекта и скопированного объекта.

Унаследован от std::logic_error

Унаследован от std::exception

Функции-элементы

уничтожает объект исключения
(virtual public of std::exception функция-элемент)[править]
[virtual]
возвращает поясняющую строку
(virtual public of std::exception функция-элемент)[править]

[править]Отчёты о дефектах

Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:

Номер Применён Поведение в стандарте Корректное поведение
LWG 254 C++98 конструктор, принимающий constchar*, отсутствовал добавлен
LWG 471 C++98 пояснительные строки копий std::length_error были
определены реализацией
они такие же, как у исходного объекта
std::length_error

[править]Смотрите также

изменяет количество сохранённых символов
(public функция-элемент std::basic_string<CharT,Traits,Allocator>)[править]
close