Namespaces
Variants

std:: out_of_range

From cppreference.net
헤더 파일에 정의됨 <stdexcept>
class out_of_range ;

예외로 던져질 객체의 유형을 정의합니다. 정의된 범위를 벗어난 요소에 접근하려는 시도로 인해 발생하는 오류를 보고합니다.

이 예외는 std::bitset std::basic_string 의 멤버 함수들, std::stoi std::stod 함수군, 그리고 범위 검사를 수행하는 멤버 접근 함수들(예: std::vector::at std::map::at )에 의해 발생할 수 있습니다.

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

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

(C++26부터)
cpp/error/exception cpp/error/logic error std-out of range-inheritance.svg

상속 다이어그램

목차

멤버 함수

(constructor)
주어진 메시지로 새로운 out_of_range 객체를 생성합니다
(public member function)
operator=
out_of_range 객체를 대체합니다
(public member function)

std::out_of_range:: out_of_range

out_of_range ( const std:: string & what_arg ) ;
(1) (constexpr since C++26)
out_of_range ( const char * what_arg ) ;
(2) (constexpr since C++26)
out_of_range ( const out_of_range & other ) ;
(3) (noexcept since C++11)
(constexpr since C++26)
1) 예외 객체를 what_arg 를 설명 문자열로 사용하여 생성합니다. 생성 후, std:: strcmp ( what ( ) , what_arg. c_str ( ) ) == 0 입니다.
2) 예외 객체를 what_arg 를 설명 문자열로 사용하여 생성합니다. 생성 후, std:: strcmp ( what ( ) , what_arg ) == 0 입니다.
3) 복사 생성자입니다. 만약 * this other 가 모두 std::out_of_range 동적 타입을 가진다면 std:: strcmp ( what ( ) , other. what ( ) ) == 0 입니다. 복사 생성자에서는 예외가 발생할 수 없습니다.

매개변수

what_arg - 설명 문자열
other - 복사할 다른 예외 객체

예외

1,2) std::bad_alloc 을 발생시킬 수 있습니다.

참고 사항

std::out_of_range 의 복사는 예외를 발생시키는 것이 허용되지 않기 때문에, 이 메시지는 일반적으로 별도로 할당된 참조 카운트 문자열로 내부에 저장됩니다. 이것이 std::string&& 를 취하는 생성자가 없는 이유이기도 합니다: 어쨌든 내용을 복사해야 하기 때문입니다.

LWG 이슈 254 가 해결되기 전에는, 비복사 생성자는 std::string 만 받아들일 수 있었습니다. 이것은 std::string 객체를 생성하기 위해 동적 할당을 필수적으로 만들었습니다.

LWG 이슈 471 가 해결된 후, 파생된 표준 예외 클래스는 공개적으로 접근 가능한 복사 생성자를 가져야 합니다. 원본 객체와 복사된 객체에 대해 what() 으로 얻은 설명 문자열이 동일한 한 암시적으로 정의될 수 있습니다.

std::out_of_range:: operator=

out_of_range & operator = ( const out_of_range & other ) ;
(C++11부터 noexcept)
(C++26부터 constexpr)

내용을 other 의 내용으로 대입합니다. * this other 모두 동적 타입이 std::out_of_range 인 경우, 대입 후 std:: strcmp ( what ( ) , other. what ( ) ) == 0 입니다. 복사 대입 연산자에서는 예외가 발생하지 않습니다.

매개변수

other - 대입할 다른 예외 객체

반환값

* this

참고

LWG 이슈 471 해결 이후, 파생된 표준 예외 클래스는 공개적으로 접근 가능한 복사 대입 연산자를 가져야 합니다. what() 으로 얻은 설명 문자열이 원본 객체와 복사된 객체에 대해 동일한 경우 암시적으로 정의될 수 있습니다.

std:: logic_error 에서 상속됨

std:: exception 로부터 상속됨

멤버 함수

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

참고 사항

표준 오류 조건 std::errc::result_out_of_range 는 일반적으로 입력이 아닌 결과가 범위를 벗어난 상황을 나타내며, std::range_error ERANGE 와 더 밀접하게 관련되어 있습니다.

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

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 254 C++98 const char * 를 받는 생성자가 누락됨 추가됨
LWG 471 C++98 std::out_of_range 의 설명 문자열이
구현에 따라 정의됨
원본 std::out_of_range 객체와
동일함

참고 항목

경계 검사와 함께 지정된 문자에 접근
( std::basic_string<CharT,Traits,Allocator> 의 public member function)
경계 검사와 함께 지정된 문자에 접근
( std::basic_string_view<CharT,Traits> 의 public member function)
경계 검사와 함께 지정된 요소에 접근
( std::deque<T,Allocator> 의 public member function)
경계 검사와 함께 지정된 요소에 접근
( std::map<Key,T,Compare,Allocator> 의 public member function)
경계 검사와 함께 지정된 요소에 접근
( std::unordered_map<Key,T,Hash,KeyEqual,Allocator> 의 public member function)
경계 검사와 함께 지정된 요소에 접근
( std::vector<T,Allocator> 의 public member function)
경계 검사와 함께 지정된 요소에 접근
( std::array<T,N> 의 public member function)
(C++26)
경계 검사와 함께 지정된 요소에 접근
( std::span<T,Extent> 의 public member function)