오류 처리에 관한 한 가지 의심이 있습니다 ...다른 함수 내부에서 호출 된 함수에서 예외가 throw되면 어떻게됩니까?
함수가 예외를 throw하고 주 프로그램에서 예외가 발견되지 않으면 잘못 작동합니다.
내 질문에 왜이 프로그램이 충돌하지 않습니까? Test
에서 예외가 throw 된 경우 함수 enterNumber
이 잡히지 않았는데도 예외가 발생합니다.
예외를 throw 할 수있는 모든 함수가 예외를 throw하는 경우를 제외하고 try-catch 블록에 넣지 않아야합니까?
2 °
void Test(int number) {
if(number < 0)
throw std::domain_error("Number is negative");
}
int enterNumber() {
int number;
std::cout << "Enter a number: ";
std::cin >> number;
try {
Test(number);
}
catch(...) {
throw;
}
return number;
}
int main() {
try {
int number = enterNumber();
std::cout << "Entered number: " << number;
}
catch(std::domain_error e) {
std::cout << e.what();
}
return 0;
}
누군가가 기능 enterNumber
이 Test
가 발생하는 경우에 예외를 throw하는 방법을 설명 할 수있는 경우 :
#include <iostream>
#include <stdexcept>
void Test(int number) {
if(number < 0)
throw std::domain_error("Number is negative");
}
int enterNumber() {
int number;
std::cout << "Enter a number: ";
std::cin >> number;
Test(number);
return number;
}
int main() {
try {
int number = enterNumber();
std::cout << "Entered number: " << number;
}
catch(std::domain_error e) {
std::cout << e.what();
}
return 0;
}
1 ° 나는이 다음과 같이 작성해야한다고 생각 그것? (경우 1 °)
당신 : 당신은 예외를 발생시킨 함수를 호출 한 함수에서 예외를 잡을 필요가 없습니다
C++로 설계된대로 작동합니다. 캐치되지 않은 함수는 스택을 버블합니다. –
예외는 함수에서 버블 업 (bubble up) 할 수 있습니다. 그것은 한 번 거품의 메인에서 문제입니다. 당신이 메인에서 버블 링하지 않으면 당신은 괜찮습니다. – NathanOliver
귀하의'시도 { 시험 (번호); } catch (...) { throw;'구조가 완전히 무의미합니다. 모든 예외를 잡아서 즉시 다시 던지기 만하면됩니다. 단지'try' /'catch'를 제거한 경우와 동일합니다. –