functional_bad_function_call
functional_bad_function_call (std::bad_function_call)
std::bad_function_call은 std::function::operator()가 호출될 때 함수 래퍼에 대상 함수가 없으면 던져지는 예외 타입이에요. 이 예외 객체는 what() 멤버 함수를 통해 설명 문자열을 제공해요. 이 페이지에서는 생성자, 대입 연산자, what() 메서드와 상속 관계를 자세히 설명할게요.
출처: cppreference
본문
개요
<functional> 헤더에 정의되어 있어요. std::bad_function_call은 std::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에 대입해요. *this와 other가 모두 동적 타입이 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) | 복사 생성 가능한 호출 가능 객체의 복사 가능 래퍼 (클래스 템플릿) |
|---|