Spec-Zone.ru › C++

std::bad_function_call

Определён в заголовочном файле <functional>
class bad_function_call;

std::bad_function_call — тип исключения, выбрасываемого std::function::operator(), если у обёртки функции нет целевого объекта.

cpp/error/exception

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

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

(constructor)
создаёт новый объект bad_function_call
(открытая функция-член)
operator=
заменяет объект bad_function_call
(открытая функция-член)
what
возвращает поясняющую строку
(открытая функция-член)

std::bad_function_call::bad_function_call

bad_function_call() noexcept;
(1) (начиная с C++11)
bad_function_call( const bad_function_call& other ) noexcept;
(2) (начиная с C++11)

Создаёт новый объект bad_function_call с завершающей нулём строкой байтов, определяемой реализацией и доступной через what().

1) Конструктор по умолчанию.
2) Конструктор копирования. Если *this и other имеют динамический тип std::bad_function_call, то std::strcmp(what(), other.what()) == 0.

Параметры

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

std::bad_function_call::operator=

bad_function_call& operator=( const bad_function_call& other ) noexcept;
(начиная с C++11)

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

Параметры

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

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

*this

std::bad_function_call::what

virtual const char* what() const noexcept;
(начиная с C++11)

Возвращает поясняющую строку.

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

Указатель на завершающую нулём строку, определяемую реализацией и содержащую поясняющую информацию. Строка подходит для преобразования и отображения в виде std::wstring. Указатель гарантированно остаётся действительным как минимум до уничтожения объекта исключения, из которого он был получен, либо до вызова неконстантной функции-члена (например, оператора присваивания копированием) для объекта исключения.

При вычислении во время компиляции возвращаемая строка кодируется с использованием обычной кодировки литералов.

(начиная с C++26)

Примечания

Реализациям разрешено переопределять what(), но это не является обязательным.

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

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

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

Пример

#include <functional>
#include <iostream>

int main()
{
    std::function<int()> f = nullptr;
    try
    {
        f();
    }
    catch (const std::bad_function_call& e)
    {
        std::cout << e.what() << '\n';
    }
}

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

bad function call

Отчёты об ошибках

Следующие отчёты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применён к Опубликованное поведение Исправленное поведение
LWG 2233 C++11 what() всегда возвращал ту же поясняющую
строку, что и std::exception::what()
возвращает собственную
поясняющую строку

См. также

function
(C++11)
копируемая обёртка для любого вызываемого объекта, который можно сконструировать копированием
(шаблон класса)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/functional/bad_function_call

Spec-Zone.ru

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