std:: logic_error
|
헤더에 정의됨
<stdexcept>
|
||
|
class
logic_error
;
|
||
프로그램 내 논리적 오류의 결과로 발생하는 예외로 던져질 객체 유형을 정의합니다. 논리적 전제 조건이나 클래스 불변식을 위반하는 등 프로그램 내 오류가 있는 논리로 인해 발생하며 예방 가능한 오류를 보고합니다.
표준 라이브러리 구성 요소 중 이 예외를 직접 던지는 것은 없지만, 예외 타입
std::invalid_argument
,
std::domain_error
,
std::length_error
,
std::out_of_range
,
std::future_error
, 그리고
std::experimental::bad_optional_access
은
std::logic_error
에서 파생되었습니다.
std::logic_error
의 모든 멤버 함수는
constexpr
입니다: 상수 표현식 평가 중에
std::logic_error
객체를 생성하고 사용하는 것이 가능합니다.
그러나,
|
(C++26부터) |
상속 다이어그램
목차 |
멤버 함수
|
(생성자)
|
주어진 메시지로 새로운
logic_error
객체를 생성합니다
(public 멤버 함수) |
|
operator=
|
logic_error
객체를 대체합니다
(public 멤버 함수) |
std::logic_error:: logic_error
|
logic_error
(
const
std::
string
&
what_arg
)
;
|
(1) | (constexpr since C++26) |
|
logic_error
(
const
char
*
what_arg
)
;
|
(2) | (constexpr since C++26) |
|
logic_error
(
const
logic_error
&
other
)
;
|
(3) |
(noexcept since C++11)
(constexpr since C++26) |
std::logic_error
를 가지면
std::
strcmp
(
what
(
)
, other.
what
(
)
)
==
0
입니다. 복사 생성자에서는 예외가 발생하지 않습니다.
매개변수
| what_arg | - | 설명 문자열 |
| other | - | 복사할 다른 예외 객체 |
예외
참고
std::logic_error
의 복사가 예외를 던지는 것을 허용하지 않기 때문에, 이 메시지는 일반적으로 별도로 할당된 참조 카운트 문자열로 내부에 저장됩니다. 이것이
std::string&&
를 취하는 생성자가 없는 이유이기도 합니다: 어쨌든 내용을 복사해야 하기 때문입니다.
LWG 이슈 254 의 해결 전에는, 비복사 생성자는 std::string 만 받아들일 수 있었습니다. 이는 std::string 객체를 생성하기 위해 동적 할당을 필수적으로 만들었습니다.
LWG 이슈 471
의 해결 후, 파생된 표준 예외 클래스는 공개적으로 접근 가능한 복사 생성자를 가져야 합니다. 원본 객체와 복사된 객체에 대해
what()
으로 얻은 설명 문자열이 동일한 한 암시적으로 정의될 수 있습니다.
std::logic_error:: operator=
|
logic_error
&
operator
=
(
const
logic_error
&
other
)
;
|
(C++11부터 noexcept)
(C++26부터 constexpr) |
|
내용을
other
의 내용으로 할당합니다.
*
this
와
other
모두 동적 타입이
std::logic_error
인 경우, 할당 후
std::
strcmp
(
what
(
)
, other.
what
(
)
)
==
0
입니다. 복사 할당 연산자에서는 예외가 발생하지 않습니다.
매개변수
| other | - | 할당할 다른 예외 객체 |
반환값
* this
참고 사항
LWG 이슈 471
해결 이후, 파생된 표준 예외 클래스는 공개적으로 접근 가능한 복사 할당 연산자를 가져야 합니다.
what()
으로 얻은 설명 문자열이 원본 객체와 복사된 객체에 대해 동일한 경우 암시적으로 정의될 수 있습니다.
std:: exception 로부터 상속됨
멤버 함수
|
[virtual]
|
예외 객체를 파괴함
(
std::exception
의 virtual public 멤버 함수)
|
|
[virtual]
|
설명 문자열을 반환함
(
std::exception
의 virtual public 멤버 함수)
|
참고 사항
| 기능 테스트 매크로 | 값 | 표준 | 기능 |
|---|---|---|---|
__cpp_lib_constexpr_exceptions
|
202502L
|
(C++26) | constexpr 예외 타입 |
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 254 | C++98 | const char * 를 받는 생성자가 누락됨 | 추가됨 |
| LWG 471 | C++98 |
std::logic_error
의 설명 문자열이
구현에 따라 정의됨 |
원본
std::logic_error
객체와
동일함 |