gpt4 book ai didi

C++ try block 和异常处理

转载 作者:太空狗 更新时间:2023-10-29 19:51:53 41 4
gpt4 key购买 nike

代码如下:

int main() {
int a, b;
while (cin >> a >> b) {
try {
if (b == 0)
throw runtime_error("Can not divide zero!");
if (a >= 100 || b >= 100)
throw range_error("a and b can not be over 100");
cout << a / b << endl;
} catch(runtime_error err){
cout << err.what() << endl;
cout << "\nTry again? Enter y or n" << endl;
char c;
cin >> c;
if (!cin || c == 'n')
break;
}
catch (range_error err2) {
cout << err2.what() << endl;
}
}
return 0;
}

我发现当我输入大于 100 的数字时,如代码所示,将抛出 range_error。但是我想知道为什么它仍然显示“再试一次?输入y或n”并且功能与第一个catch block 完全相同。在第二个 catch 语句中,没有任何代码告诉用户输入 y 或 n。而如果我删除了第一个catch语句中的相关代码,那么当range_error发生时,这条消息就不会显示了。

顺便说一下,如果 try block 抛出两个需要不同处理过程的 runtime_errors,程序将如何判断要运行哪个 catch 语句?

最佳答案

您需要首先捕获 range_error,因为它是从 runtime_error 派生的。捕获 runtime_error 首先也会捕获 range_error

此外,您应该通过 const 引用捕获异常。通过按值捕获它们,您正在制作不需要的拷贝。

我还要补充一件事...通常,您不希望像现在这样使用异常来控制程序流。

关于C++ try block 和异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34210611/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com