Spec-Zone.ru › C++

std::format_error

Определён в заголовочном файле <format>
class format_error;
(начиная с C++20)

Определяет тип объекта-исключения, выбрасываемого для сообщения об ошибках в библиотеке форматирования.

cpp/error/exception cpp/error/runtime error

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

Функции-члены

(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)
1) Создаёт объект-исключение, используя what_arg в качестве поясняющей строки. После создания std::strcmp(what(), what_arg.c_str()) == 0.
2) Создаёт объект-исключение, используя what_arg в качестве поясняющей строки. После создания std::strcmp(what(), what_arg) == 0.
3) Конструктор копирования. Если *this и other имеют динамический тип std::format_error, то std::strcmp(what(), other.what()) == 0. Конструктор копирования не может выбрасывать исключения.

Параметры

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

Исключения

1,2) Может выбросить 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)
what
[виртуальная]
возвращает поясняющую строку
(виртуальная открытая функция-член класса 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API