如果从在其他函数中调用的函数引发异常会发生什么情况
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;
}
我认为应该这样写:
阿拉伯数字°
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°(
谢谢:)
不需要从调用导致异常的函数的函数中捕获异常。实际上,最佳做法是尽可能(但不要更进一步(从引发异常的站点捕获异常,因为只有在程序的更高级别,您才有足够的信息来生成有意义的错误消息,和/或以其他方式处理异常。但是,应在程序的某个级别捕获异常,否则程序将以不受控制的方式终止。
相关文章:
- 赋予全局变量而不是局部变量优先级的函数 - (异常行为)
- 通过引用从 c++ 函数异常返回对象是否安全
- 智能指针和构造函数异常
- 构造函数C++异常说明符
- boost::archive::text_iarchive构造函数异常
- C++堆栈对象的构造函数异常处理
- 默认构造函数C++异常不会引发吗?
- 重写std的析构函数:异常
- 将向量作为参数(C++)传递时,没有匹配函数异常
- 当函数中静态变量的构造函数异常终止时会发生什么
- 如何:捕获输入函数异常的可变包装函数
- 在c++中,如果基类构造函数异常,则构造函数和析构函数的顺序可以是这样
- noexcept(false)析构函数覆盖所有特殊成员函数'异常规范
- c++重载函数异常规范
- c++ RAII析构函数异常
- 如何捕获构造函数异常
- C++构造函数异常处理
- 捕获构造函数异常的RAII方法
- C++析构函数异常
- Std::unique_ptr::reset和构造函数异常