std:: format_error
|
Определено в заголовочном файле
<format>
|
||
|
class
format_error
:
public
runtime_error
|
(начиная с C++20) | |
Определяет тип объекта исключения, выбрасываемого для сообщения об ошибках в библиотеке форматирования.
Все функции-члены
std::format_error
являются
constexpr
: возможно создавать и использовать объекты
std::format_error
при вычислении константного выражения.
Однако объекты
|
(since C++26) |
Диаграмма наследования
Содержание |
Функции-члены
|
(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) |
std::format_error
, то
std::
strcmp
(
what
(
)
, other.
what
(
)
)
==
0
. Из конструктора копирования не может быть выброшено исключение.
Параметры
| what_arg | - | поясняющая строка |
| other | - | другой объект исключения для копирования |
Исключения
Примечания
Поскольку копирование
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