本文主要是介绍经验分享,如何使用try,catch, throw之二,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
什么时候使用try,catch,什么时候不用;什么时候用throw,什么时候不用。工作了很多年才明白。我个人的理解是:
1。在private或者protected的成员函数不使用try,catch,而只使用throw
2。如果在private或者protected的成员函数需要使用try,catch,那么就要使用rethrow
3。在public成员函数里使用try,catch
4。如果该类相对于整个项目来说是属于被调用层,那么public成员函数也可以不使用try,catch
5。如果调用第三方的代码,我一般都会用try,catch
我个人的习惯是把private或者protected成员函数的名字使用前缀__,public函数不用
先看一个我不喜欢的写法
//------------- try, catch, throw 例子,不喜欢的写法 ------------
class CTest
{
public:
int Init();
private:
int __InitA();
int __InitB();
int __InitC();
}
//--------- Init ------------
int CTest:Init()
{
try
{
int err;
err = __InitA();
if (err != 1)
throw -1;
err = __InitB();
if (err != 1)
throw -2;
err = __InitC();
if (err != 1)
throw 3;
return 1;
}
catch(int & err)
{
return err;
}
}
//---------- __InitA ----------
int CTest::__InitA()
{
try
{
int err;
err = DoSomething1();
if (err != 1)
throw -1;
err = DoSomething2();
if (err != 1)
throw -2;
return 1;
}
catch(int & err)
{
return err;
}
}
__InitB, ___InitC和___InitA类似
下面是我个人比较喜欢的写法
//------------- try, catch, throw 例子,喜欢的写法 ------------
class CTest
{
public:
int Init();
private:
int __InitA();
int __InitB();
int __InitC();
}
//--------- Init ------------
int CTest:Init()
{
try
{
__InitA();
__InitB();
__InitC();
return 1;
}
catch(int & err)
{
return err;
}
}
//---------- __InitA ----------
int CTest::__InitA()
{
int err;
err = DoSomething1();
if (err != 1)
throw -1;
err = DoSomething2();
if (err != 1)
throw -2;
return 1;
}
__InitB, ___InitC和___InitA类似
这篇关于经验分享,如何使用try,catch, throw之二的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!