Namespaces
Variants

std:: format_error

From cppreference.net
Определено в заголовочном файле <format>
class format_error : public runtime_error
(начиная с C++20)

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

Все функции-члены std::format_error являются constexpr : возможно создавать и использовать объекты std::format_error при вычислении константного выражения.

Однако объекты std::format_error обычно не могут быть constexpr , поскольку любая динамически выделенная память должна быть освобождена в том же вычислении константного выражения.

(since C++26)
cpp/error/exception cpp/error/runtime error std-format error-inheritance.svg

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

Содержание

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

(constructor)
создает новый объект format_error с заданным сообщением
(public member function)
operator=
заменяет объект format_error
(public member function)

std::format_error:: format_error

format_error ( const std:: string & what_arg ) ;
(1) (constexpr since C++26)
format_error ( const char * what_arg ) ;
(2) (constexpr since C++26)
format_error ( const format_error & other ) noexcept ;
(3) (constexpr since C++26)
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 ;
(constexpr since C++26)

Присваивает содержимое объекта other . Если * this и other оба имеют динамический тип std::format_error , то std:: strcmp ( what ( ) , other. what ( ) ) == 0 после присваивания. Оператор копирующего присваивания не может генерировать исключения.

Параметры

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

Возвращаемое значение

* this

Примечания

Производный класс стандартного исключения должен иметь общедоступный оператор копирующего присваивания. Он может быть неявно определен, если пояснительные строки, полученные с помощью what() , одинаковы для исходного объекта и скопированного объекта.

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


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

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

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

Примечания

Макрос тестирования возможностей Значение Стандарт Функция
__cpp_lib_constexpr_exceptions 202502L (C++26) constexpr типы исключений

Пример

#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); // выбрасывает исключение
    }
    catch(const std::format_error& ex)
    {
        std::println("{}", ex.what());
    }
}

Возможный вывод:

format error: failed to parse format-spec

Смотрите также