参考:
C++中try/catch/throw的使用_c++try catch throw用法-CSDN博客
C++之 try语句块和异常处理_c++ try-CSDN博客
简单的try catch 示例:
cpp
#include <iostream>
using namespace std;
double division(int a,int b)
{
if(b==0)
{
throw "division by zero condition!"; // 第一个throw
}
return (a/b);
}
int main() {
try{
double a,b;
//cin>>a>>b;
a=1;
b=0;
cout<<division(a,b)<<endl;
}
catch(const char* e){ // 第一种
cout<<"error:"<<e<<endl;
}
return 0;
}
自定义错误结构体:
cpp
#include <iostream>
#include <exception>
#include <string>
using namespace std;
struct MyException : public exception{
string err;
MyException (){}
MyException (const string s){
err = s;
}
const char *what() const throw(){
return (string("C++ MyException:") + err).c_str();
}
};
double division(int a,int b)
{
if(b==0)
{
//throw "division by zero condition!"; // 第一个throw
throw MyException("division by zero condition!"); // 第二个thorw:自定义错误类型
}
return (a/b);
}
int main() {
try{
double a,b;
//cin>>a>>b;
a=1;
b=0;
cout<<division(a,b)<<endl;
}
catch(const char* e){ // 第一种
cout<<"error:"<<e<<endl;
}
catch(MyException err){ // 第二种
cout<<"myError:"<<err.what()<<endl;
}
return 0;
}
此处的const char *what() const throw() 后面的const throw(),意思是表示该函数不会修改对象的成员变量,且该函数不会抛出任何异常。 throw(),目前被noexcept关键字替代。
使用万能接收:
cpp
#include <iostream>
#include <exception>
#include <string>
using namespace std;
struct MyException : public exception{
string err;
MyException (){}
MyException (const string s){
err = s;
}
const char *what() const throw(){
return (string("C++ MyException:") + err).c_str();
}
};
double division(int a,int b)
{
if(b==0)
{
//throw "division by zero condition!"; // 第一个throw
throw MyException("division by zero condition!"); // 第二个thorw:自定义错误类型
}
return (a/b);
}
int main() {
try{
double a,b;
//cin>>a>>b;
a=1;
b=0;
cout<<division(a,b)<<endl;
}
catch(const char* e){ // 第一种
cout<<"error:"<<e<<endl;
}
// catch(MyException err){ // 第二种
// cout<<"myError:"<<err.what()<<endl;
// }
catch (const std::exception& e) { // 第三种:万能接收,也可以接收自定义错误
std::cout <<"std error:"<< e.what() << '\n';
}
return 0;
}
使用标准报错输出:
cpp
#include <iostream>
#include <exception>
#include <string>
using namespace std;
double division(int a,int b)
{
if(b==0)
{
throw runtime_error("division by zero condition!"); // 第四个throw:使用标准报错
}
return (a/b);
}
int main() {
try{
double a,b;
//cin>>a>>b;
a=1;
b=0;
cout<<division(a,b)<<endl;
}
catch(runtime_error err){ // 第四种:使用std标准错误类型
cout<<"runtime_error:"<<err.what()<<endl;
}
return 0;
}