如果在其他函数内部调用的函数抛出异常会怎样?
What happens if an exception is thrown from a function which was called inside other function?
我对错误处理有一个疑问...
如果一个函数抛出异常并且该异常没有被主程序捕获,将会严重崩溃。
我的问题是为什么这个程序没有崩溃?如果 Test
函数抛出异常,即使没有被捕获,enterNumber
也会抛出异常?
难道不应该将每个可能抛出异常的函数都放在 try-catch 块中以防它抛出异常吗?
1°
#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;
}
我觉得应该这样写:
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
抛出异常时抛出异常? (案例 1°)
谢谢:)
您不需要从调用导致异常的函数的函数中捕获异常。实际上,最佳做法是尽可能(但不要更远)从抛出异常的站点捕获异常,因为只有在程序的更高级别,您才有足够的信息来生成有意义的错误消息,and/or 以其他方式处理异常。但是,应该在程序的某些层捕获异常,否则程序将以不受控制的方式终止。
我对错误处理有一个疑问...
如果一个函数抛出异常并且该异常没有被主程序捕获,将会严重崩溃。
我的问题是为什么这个程序没有崩溃?如果 Test
函数抛出异常,即使没有被捕获,enterNumber
也会抛出异常?
难道不应该将每个可能抛出异常的函数都放在 try-catch 块中以防它抛出异常吗?
1°
#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;
}
我觉得应该这样写:
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
抛出异常时抛出异常? (案例 1°)
谢谢:)
您不需要从调用导致异常的函数的函数中捕获异常。实际上,最佳做法是尽可能(但不要更远)从抛出异常的站点捕获异常,因为只有在程序的更高级别,您才有足够的信息来生成有意义的错误消息,and/or 以其他方式处理异常。但是,应该在程序的某些层捕获异常,否则程序将以不受控制的方式终止。