c 能否自动throw错误
用过python异常处理的人都知道,try块发生错误可以自动引发,不须要if...throw,我不关心错误类型,不需要我去判断错误发生的条件,所有错误交由catch (...)处理,我试了下,不手动throw,catch是不理的。
[解决办法]
python程序是在python环境中运行,出现异常时环境会抛出异常.
c++程序是直接在OS上运行, 出现异常时OS不会抛出异常.
[解决办法]
所有C++ try block后面catch到的exception都必须有对应的throw, 没有throw, 就没东西可catch。所以像divide by zero, access violation都是catch不到的,不管你try的多么hard :)
但是在try块里检测错误并throw是错误的做法,应该是try块里调用的函数(包括成员函数)有责任检测异常并适当地throw。
例子, 错误的做法
class MyVeryLargeNumber{
public:
MyVeryLargeNumber& /=(int rhs)
{
// do the actual calculation
return *this;
}
};
int main()
{
int m;
MyVeryLargeNumber n;
// init n, m, etc
try{
if(m==0)
throw "divide by zero!";
n/=m;
}catch(...){
// do something
}
}
#include <iostream>
#include <vector>
int main()
{
using namespace std;
vector<int> vi;
try
{
cout << vi.at(0) <<endl;
}
catch (out_of_range&)
{
cerr << "no element at the location yet.\n";
}
}