functional_bad_function_call

functional_bad_function_call (std::bad_function_call)

std::bad_function_callstd::function::operator()가 호출될 때 함수 래퍼에 대상 함수가 없으면 던져지는 예외 타입이에요. 이 예외 객체는 what() 멤버 함수를 통해 설명 문자열을 제공해요. 이 페이지에서는 생성자, 대입 연산자, what() 메서드와 상속 관계를 자세히 설명할게요.

출처: cppreference

본문

개요

<functional> 헤더에 정의되어 있어요. std::bad_function_callstd::exception에서 파생된 예외 클래스로, std::function 객체가 비어 있는 상태에서 호출될 때 발생해요.

멤버 함수

멤버 함수 설명
(constructor) 새로운 bad_function_call 객체를 생성해요 (공개 멤버 함수)
operator= bad_function_call 객체를 대입해요 (공개 멤버 함수)
what 설명 문자열을 반환해요 (공개 멤버 함수)

생성자

bad_function_call() noexcept;
bad_function_call(const bad_function_call& other) noexcept;

구현에서 정의한 널 종료 바이트 문자열로 새 bad_function_call 객체를 생성해요. 이 문자열은 what()을 통해 접근할 수 있어요.

매개변수

| other | - | 복사할 다른 예외 객체 |

operator=

bad_function_call& operator=(const bad_function_call& other) noexcept;

other의 내용을 *this에 대입해요. *thisother가 모두 동적 타입이 std::bad_function_call이라면, 대입 후 std::strcmp(what(), other.what()) == 0이 성립해요.

매개변수

| other | - | 대입할 다른 예외 객체 |

반환값

*this

what

virtual const char* what() const noexcept;

설명 문자열을 반환해요.

반환값

설명 정보를 담은 구현 정의 널 종료 문자열에 대한 포인터예요. 이 문자열은 std::wstring으로 변환하거나 표시하기에 적합해요. 포인터는 얻은 예외 객체가 소멸될 때까지, 또는 예외 객체에 대해 비-const 멤버 함수(예: 복사 대입 연산자)가 호출될 때까지 유효함이 보장돼요.

| 반환된 문자열은 상수 평가 중에 일반 리터럴 인코딩으로 인코딩돼요. | (C++26부터) |

참고 사항

구현은 what()을 재정의할 수 있지만 필수는 아니에요.

std::exception에서 상속받은 멤버 함수

멤버 함수 설명
(destructor) [virtual] 예외 객체를 소멸해요 (std::exception의 가상 공개 멤버 함수)
what [virtual] 설명 문자열을 반환해요 (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) 복사 생성 가능한 호출 가능 객체의 복사 가능 래퍼 (클래스 템플릿)

더 알아보기 (Learn more)

cppreference