Namespaces
Variants

std:: bad_optional_access

From cppreference.net
Utilities library
헤더 파일에 정의됨 <optional>
class bad_optional_access : public std:: exception
(C++17부터)

값을 포함하지 않는 optional 객체에 접근할 때 std::optional::value 에 의해 발생되는 객체의 유형을 정의합니다.

std::bad_optional_access 의 모든 멤버 함수는 constexpr 입니다: 상수 표현식 평가 중에 std::bad_optional_access 객체를 생성하고 사용하는 것이 가능합니다.

그러나, std::bad_optional_access 객체는 일반적으로 constexpr 일 수 없습니다. 왜냐하면 동적으로 할당된 저장 공간은 동일한 상수 표현식 평가 내에서 해제되어야 하기 때문입니다.

(C++26부터)
cpp/error/exception std-bad optional access-inheritance-lwg2806.svg

상속 다이어그램

목차

멤버 함수

(생성자)
새로운 bad_optional_access 객체를 생성함
(public 멤버 함수)
operator=
bad_optional_access 객체를 대체함
(public 멤버 함수)
what
설명 문자열을 반환함
(public 멤버 함수)

std::bad_optional_access:: bad_optional_access

bad_optional_access ( ) noexcept ;
(1) (C++17부터)
(C++26부터 constexpr)
bad_optional_access ( const bad_optional_access & other ) noexcept ;
(2) (C++17부터)
(C++26부터 constexpr)

bad_optional_access 객체를 생성합니다. 구현에서 정의된 null-terminated byte string을 포함하며, 이는 what() 을 통해 접근할 수 있습니다.

1) 기본 생성자입니다.
2) 복사 생성자입니다. * this other 모두 동적 타입 std::bad_optional_access 를 가질 경우, std:: strcmp ( what ( ) , other. what ( ) ) == 0 입니다.

매개변수

other - 복사할 다른 예외 객체

std::bad_optional_access:: operator=

bad_optional_access & operator = ( const bad_optional_access & other ) noexcept ;
(C++17부터)
(C++26부터 constexpr)

내용을 other 의 내용으로 대입합니다. * this other 모두 동적 타입이 std::bad_optional_access 인 경우, 대입 후 std:: strcmp ( what ( ) , other. what ( ) ) == 0 입니다.

매개변수

other - 대입할 다른 예외 객체

반환 값

* this

std::bad_optional_access:: what

virtual const char * what ( ) const noexcept ;
(C++17부터)
(C++26부터 constexpr)

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

반환 값

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

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

(C++26부터)

참고

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

std:: exception 에서 상속됨

멤버 함수

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

참고 사항

기능 테스트 매크로 표준 기능
__cpp_lib_constexpr_exceptions 202502L (C++26) constexpr std::bad_optional_access

예제

#include <iostream>
#include <optional>
int main()
{
    std::optional<int> opt; // 빈 optional 생성
    try
    {
        [[maybe_unused]] auto x = opt.value(); // 예외 발생
    }
    catch (const std::bad_optional_access& ex)
    {
        std::cout << ex.what() << '\n';
    }
}

가능한 출력:

bad optional access

참고 항목

예상치 않은 값을 포함하는 expected 에 대한 검증된 접근을 나타내는 예외
(클래스 템플릿)
variant 값에 대한 잘못된 접근 시 발생하는 예외
(클래스)