求try与catch的用法!

try

catch

的用法!

1 个赞

用于异常处理
基本用法:

try {
    //代码
} catch(/*参数(代码异常类型变量)*/) {
    //应对措施
}

当try代码块内发生catch参数类型的错误,就会执行catch代码块内的内容,而不是抛出RE
例子 :chestnut: :

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排着队试图抓捕异常,抓到了就执行解决方案
如果还不懂可以网上搜 :slightly_smiling_face:
感觉对调试来说挺有用

2 个赞

wow,爱了爱了

1 个赞

thank you
已经点了解决方案
:grinning: :grinning: :grinning:

1 个赞

Orz

1 个赞

谢谢 :pray: :grinning:

1 个赞

以后就可以避免 \color{purple}MLE\color{fuchsia}RE:grin:

虽然但是确实挺有用,但感觉很少人写(难道只有我不用这个东西调试?)

+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
“…”