std::format_error
Определён в заголовочном файле <format> | ||
|---|---|---|
class format_error; | (начиная с C++20) |
Определяет тип объекта-исключения, выбрасываемого для сообщения об ошибках в библиотеке форматирования.
Диаграмма наследования
Функции-члены
|
(constructor) | создаёт новый объект format_error с указанным сообщением (открытая функция-член) |
|
operator= | заменяет объект format_error (открытая функция-член) |
std::format_error::format_error
format_error( const std::string& what_arg ); | (1) | |
format_error( const char* what_arg ); | (2) | |
format_error( const format_error& other ) noexcept; | (3) |
what_arg в качестве поясняющей строки. После создания std::strcmp(what(), what_arg.c_str()) == 0.what_arg в качестве поясняющей строки. После создания std::strcmp(what(), what_arg) == 0.*this и other имеют динамический тип std::format_error, то std::strcmp(what(), other.what()) == 0. Конструктор копирования не может выбрасывать исключения.Параметры
| what_arg | - | поясняющая строка |
| other | - | другой объект-исключение для копирования |
Исключения
std::bad_alloc.Примечания
Поскольку копирование std::format_error не должно выбрасывать исключения, это сообщение обычно хранится во внутренней строке с подсчётом ссылок, размещённой отдельно. По этой же причине конструктора, принимающего std::string&&, нет: содержимое всё равно пришлось бы копировать.
Производный класс стандартного исключения должен иметь общедоступный конструктор копирования. Его можно определить неявно, если поясняющие строки, полученные с помощью what(), одинаковы для исходного объекта и его копии.
std::format_error::operator=
format_error& operator=( const format_error& other ) noexcept; |
Присваивает содержимому значение other. Если *this и other имеют динамический тип std::format_error, то после присваивания std::strcmp(what(), other.what()) == 0. Оператор копирующего присваивания не может выбрасывать исключения.
Параметры
| other | - | другой объект-исключение, значение которого присваивается |
Возвращаемое значение
*this
Примечания
Производный класс стандартного исключения должен иметь общедоступный оператор копирующего присваивания. Его можно определить неявно, если поясняющие строки, полученные с помощью what(), одинаковы для исходного объекта и его копии.
Унаследовано от std::runtime_error
Унаследовано от std::exception
Функции-члены
|
[виртуальная] | уничтожает объект-исключение (виртуальная открытая функция-член класса std::exception) |
|
[виртуальная] | возвращает поясняющую строку (виртуальная открытая функция-член класса std::exception) |
Пример
#include <format>
#include <print>
#include <string_view>
#include <utility>
int main()
{
try
{
auto x13{37};
auto args{std::make_format_args(x13)};
std::ignore = std::vformat("{:()}", args); // throws
}
catch(const std::format_error& ex)
{
std::println("{}", ex.what());
}
}
Возможный вывод:
format error: failed to parse format-spec
См. также
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/format/format_error