Namespaces
Variants

std::bad_cast

cppreference.net에서
 
 
유틸리티 라이브러리
일반 유틸리티
관계 연산자 (C++20부터 폐기됨)
정수 비교 함수
(C++20)(C++20)(C++20)    
(C++20)
교체 및 타입 연산
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
일반 어휘 타입
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
헤더 <typeinfo>
class bad_cast : public std::exception;

에 정의됨dynamic_cast가 참조 타입으로의 런타임 검사에 실패했을 때(예: 타입이 상속으로 연결되지 않은 경우), 그리고 std::use_facet이 로케일에서 요청한 퍼싯(facet)을 찾을 수 없을 때 이 타입의 예외가 발생합니다.

cpp/error/exception

상속 다이어그램

멤버 함수

(constructor)
새로운 bad_cast 객체를 생성합니다
(public member function)
operator=
bad_cast 객체를 대체합니다
(public member function)
what
설명 문자열을 반환합니다
(public member function)

std::bad_cast:: bad_cast

(1)
bad_cast ( ) throw ( ) ;
(C++11 이전)
bad_cast ( ) noexcept ;
(C++11 이후)
(C++26 이후 constexpr)
(2)
bad_cast ( const bad_cast & other ) throw ( ) ;
(C++11 이전)
bad_cast ( const bad_cast & other ) noexcept ;
(C++11 이후)
(C++26 이후 constexpr)

새로운 bad_cast 객체를 구현 정의된 null 종료 바이트 문자열과 함께 생성합니다. 이 문자열은 what() 을 통해 접근할 수 있습니다.

1) 기본 생성자.
2) 복사 생성자. 만약 * this 와 other 모두 동적 타입이 std::bad_cast 라면 std:: strcmp ( what ( ) , other. what ( ) ) == 0 입니다. (C++11 이후)

매개변수

other - 복사할 다른 예외 객체

std::bad_cast::operator=

bad_cast& operator=( const bad_cast& other ) throw();
(C++11까지)
bad_cast& operator=( const bad_cast& other ) noexcept;
(C++11부터)

other의 내용으로 내용을 할당합니다. *this와 other의 동적 타입이 모두 std::bad_cast인 경우, 할당 후 std::strcmp(what(), other.what()) == 0입니다.(C++11부터)

매개변수

other - 할당할 다른 예외 객체

반환값

* this

std::bad_cast::what

virtual const char* what() const throw();
(C++11까지)
virtual const char* what() const noexcept;
(C++11부터)
(constexpr since C++26)

설명 문자열을 반환합니다.

반환값

설명 정보를 포함하는 구현 정의 널 종료 문자열에 대한 포인터입니다. 이 문자열은 std::wstring 으로 변환 및 표시하기에 적합합니다. 이 포인터는 적어도 해당 예외 객체가 파괴되거나 예외 객체의 비상수 멤버 함수(예: 복사 할당 연산자)가 호출되기 전까지는 유효함이 보장됩니다.

상수 평가 중에는 반환된 문자열이 일반 리터럴 인코딩으로 인코딩됩니다.

(C++26 이후)

참고

구현체는 what() 을 재정의할 수 있지만 필수는 아닙니다.

std:: exception 에서 상속됨

멤버 함수

[virtual]
예외 객체를 파괴함
( std::exception 의 virtual public 멤버 함수)
[virtual]
설명 문자열을 반환함
( std::exception 의 virtual public 멤버 함수)

참고 사항

기능 테스트 매크로 값 표준 기능
__cpp_lib_constexpr_exceptions 202411L (C++26) constexpr 예외 타입

예제

#include <iostream>
#include <typeinfo>
struct Foo { virtual ~Foo() {} };
struct Bar { virtual ~Bar() { std::cout << "~Bar\n"; } };
struct Pub : Bar { ~Pub() override { std::cout << "~Pub\n"; } };
int main()
{
    Pub pub;
    try
    {
        [[maybe_unused]]
        Bar& r1 = dynamic_cast<Bar&>(pub); // OK, 업캐스트
        [[maybe_unused]]
        Foo& r2 = dynamic_cast<Foo&>(pub); // 예외 발생
    }
    catch (const std::bad_cast& e)
    {
        std::cout << "e.what(): " << e.what() << '\n';
    }
}

가능한 출력:

e.what(): std::bad_cast
~Pub
~Bar