문제

Java에서 메소드에 대한 입력 인수가 유효하지 않은 경우 IllegalArgumentException (유형입니다 RuntimeException). C ++에서는 점검 및 확인되지 않은 예외라는 개념이 없습니다. 표준 C ++에서 런타임 예외를 나타내는 데 사용할 수있는 예외가 있습니까? 아니면 표준에는 공통 스타일이 없지만 모두가 이와 같은 상황에 대해 실제로 따라 갑니까?

아니면 내 자신의 사용자 지정 예외를 만들어 던져야합니까?

도움이 되었습니까?

해결책

Java와 달리 C ++에는 "표준 프레임 워크"가 아니라 작은 (및 선택적) 표준 라이브러리 만 있습니다. 또한 C ++ 프로그래머에 따라 예외 사용 여부에 따라 다른 의견이 있습니다. 조금도.

따라서 다른 사람들의 다른 권장 사항을 찾을 수 있습니다. 일부는 표준 라이브러리에서 예외 유형을 사용하고 일부 라이브러리 (예 : POCO)는 사용자 정의 예외 계층 (STD :: 예외에서 파생)을 사용하며 다른 라이브러리는 전혀 예외를 사용하지 않습니다. (예 : QT).

표준 라이브러리를 고수하려면 전문화 된 예외 유형이 있습니다. invalid_argument (확장 logic_error).

#include <stdexcept>

// ...
throw std::invalid_argument("...");

참조 용 : 다음은 정의 된 표준 예외 유형에 대한 개요입니다. stdexcept:

exception
    logic_error
        domain_error
        invalid_argument
        length_error
        out_of_range
    runtime_error
        range_error
        overflow_error
        underflow_error

다른 팁

std :: domain_error는 당신이 찾고있는 것일 수 있지만, 나는 그것을 사용하는 사람이 거의 없다고 생각합니다. 대부분의 사람들은 std :: 예외에서 자신의 예외 유형을 도출합니다.

나는 항상 사용합니다 std::invalid_argument 불법적 인 주장.

유효하지 않은 경우 방법을 만족하지 못한다는 것은 예상 값을 만족시키지 못한다는 것을 의미합니다.

std::logic_error 
or 
std::runtime_error.

한 객체와 같은 캐스트와 관련된 것이 다른 개체로 변환 될 수 없다는 것을 의미한다면 예외는 예외는 없으며 자동으로 던져지지 않습니다.

실제로 그것은 할 것입니다. 그러나 참조에서 Dynamic_cast <>에만 해당됩니다. 던질 것입니다

std::bad_cast

나는 이것을 당신 자신으로 던지는 것이 좋은 생각인지 확실하지 않습니다.

로직 오류이기 때문에 누군가 잘못된 매개 변수를 통과 한 경우 Logic_error와 그 파생 상품을 사용하는 것이 좋습니다. 프로그래머는 잘못된 유형의 인수를 전달했습니다.

그러나 나는 그러한 경우에 내가 주장하는 것을 좋아합니다. 잘못된 값이나 유형을 기능에 전달하는 것과 같은 것은 개발 중에 만 허용 될 수 있으며 릴리스에서 그러한 점검을 피해야합니다.

표준 예외를 던지거나 직접 굴릴 수 있습니다. 당신은 당신이 던지고있는 예외에 추가 정보를 포함하고 싶을 수도 있으며, 그것은 당신 자신의 일을해야 할 좋은 이유 일 것입니다.

개인적으로, 나는 내가 작업 한 시스템에서 그러한 도메인 체크인을 보지 못했습니다. 확실히 보편적이지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top