求
try
与
catch
的用法!
求
try
与
catch
的用法!
用于异常处理
基本用法:
try {
//代码
} catch(/*参数(代码异常类型变量)*/) {
//应对措施
}
当try代码块内发生catch参数类型的错误,就会执行catch代码块内的内容,而不是抛出RE
例子 :
int a[114];
try {
int b = a[114514];//数组越界异常
} catch (const std::out_of_range& e /*数组越界异常变量*/) {
std::cerr << "数组越界: " << e.what()/*成员函数,详细讲述错误情况*/<< '\n';
}
还有其实可以并列多个catch:
try {
//你的代码
} catch (const std::out_of_range& e) {
std::cerr << "数组越界: " << e.what() << '\n';
} catch (const std::bad_alloc& e) {
std::cerr << "内存分配失败: " << e.what() << '\n';
} catch (...) {
// 处理其他所有类型的异常,类似于else
std::cerr << "未知异常\n";
}
每个catch排着队试图抓捕异常,抓到了就执行解决方案
如果还不懂可以网上搜
感觉对调试来说挺有用
wow,爱了爱了
thank you
已经点了解决方案
Orz
谢谢
以后就可以避免 \color{purple}MLE 和 \color{fuchsia}RE 了
虽然但是确实挺有用,但感觉很少人写(难道只有我不用这个东西调试?)
+1,才知道
不是,我之前一直以为是python才有try的
真是没有想到c++居然也有try
不谢
#include <iostream>
using namespace std;
int main(){
double m,n;
cin>>m>>n;
try{
cout<<"before dividing."<<endl;
if(n==0)throw -1;//抛出int类型异常
else{
cout<<m/n<<endl;
cout<<"after dividing."<<endl;
}
}
catch(double d){
cout<<"catch(double) "<<d<<endl;
}
catch(int e){
cout<<"catch(int) "<<e<<endl;
}
cout<<"finished"<<endl;
return 0;
}
#include <iostream>
using namespace std;
int main(){
double m, n;
cin>>m>>n;
try{
cout<<"before dividing."<<endl;
if(n==0)throw -1; //抛出整型异常
else if(m == 0)throw -1.0; //拋出 double 型异常
else{
cout<<m/n<<endl;
cout<<"after dividing."<<endl;
}
}
catch(double d){
cout << "catch (double)" << d << endl;
}
catch(...){
cout<<"catch (...)"<<endl;
}
cout<<"finished"<<endl;
return 0;
}
下面那个是能捕获没有捕获到的错误的
catch(...){
/*代码*/
}
括号里就填“…”
管理惊现……
+1
BI
“…”