如果从在其他函数中调用的函数引发异常会发生什么情况

What happens if an exception is thrown from a function which was called inside other function?

本文关键字:函数 异常 什么情况 调用 其他 如果      更新时间:2023-10-16

我对错误处理有一个疑问...

如果函数抛出异常并且该异常未在主程序中捕获,则会严重崩溃。

我的问题是为什么这个程序不崩溃?如果从函数中抛出异常Test enterNumber即使没有被捕获也会引发异常?

难道不应该把每个可能引发异常的函数都放在一个 try-catch 块中,以防万一它抛出它?

    #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;
    }

我认为应该这样写:

阿拉伯数字°

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抛出异常时引发异常?(案例 1°(

谢谢:)

不需要从调用导致异常的函数的函数中捕获异常。实际上,最佳做法是尽可能(但不要更进一步(从引发异常的站点捕获异常,因为只有在程序的更高级别,您才有足够的信息来生成有意义的错误消息,和/或以其他方式处理异常。但是,应在程序的某个级别捕获异常,否则程序将以不受控制的方式终止。