0으로 나누기 예외 잡기
try/catch 블록을 사용하여 예외를 잡으려고 시도했지만 다음 코드는 설명할 수 없을 정도로 예외를 우회합니다. 0으로 나눌 때 예외:
int i = 0; cin >> i; // input validation not present try { i = 5/i; } catch (std::logic_error e) { cerr << e.what(); }
예외 C에서 처리
기대와는 달리 0으로 정수 나누기는 표준 C에서 기본 제공 예외가 아닙니다. 이는 0으로 부동 소수점 나누기/나머지의 경우에도 마찬가지입니다. 단, 이 경우 NaN/Inf와 같은 특정 유리수 값이 발생할 수 있습니다.
ISO C 20 표준에 정의된 예외 목록에는 다음이 포함됩니다.
logic_error domain_error invalid_argument length_error out_of_range runtime_error range_error overflow_error underflow_error
overflow_error 또는 domain_error를 사용하여 0으로 나누기를 표시하는 인수를 만들 수 있지만 표준에서는 해당 동작이 다음과 같은 경우 정의되지 않았다고 명시적으로 명시합니다.
사용자 정의 예외 처리
0으로 나누기 예외가 필요한 경우 수동으로 구현할 수 있습니다. 다음 예에서는 intDivEx 함수를 사용하여 예외 처리를 통해 정수를 나눕니다.
inline int intDivEx (int numerator, int denominator) { if (denominator == 0) throw std::overflow_error("Divide by zero exception"); return numerator / denominator; }
이 함수 사용의 출력은 예외가 발생하고 포착되는 것을 보여 주며, 나누기의 경우 원래 변수는 그대로 유지됩니다. -제로:
i = intDivEx(10, 0); // throws exception i = intDivEx(10, 2); // returns 5
위 내용은 C가 정수 0으로 나누기에 대해 예외를 발생시키지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!