std:: bad_cast
|
헤더에 정의됨
<typeinfo>
|
||
|
class
bad_cast
:
public
std::
exception
|
||
이 유형의 예외는 참조 타입으로의 dynamic_cast 가 런타임 검사에 실패할 때(예: 타입이 상속 관계로 관련되지 않은 경우) 발생하며, 또한 로케일에 요청된 패싯이 존재하지 않을 때 std::use_facet 에서도 발생합니다.
상속 다이어그램
목차 |
멤버 함수
|
(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()
을 통해 접근할 수 있습니다.
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 이후)
(C++26 이후 constexpr) |
|
내용을
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 이후)
(C++26부터 constexpr) |
|
설명 문자열을 반환합니다.
반환값
설명 정보를 포함하는 구현 정의 널 종료 문자열에 대한 포인터입니다. 이 문자열은 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