异常是面向对象语言中处理错误的一种方式,在C语言中当遇到错误时,我们有两种方式去处理1、返回错误码 2、终止进程。第一种方式,当我们调用函数堆栈很深时,我们就需要层层返回,很麻烦。下面来介绍异常的用法:先要知道,throw语句可以抛出任何类型的对象。也就意味着我们可以抛出错误码,错误信息等等。用一个div函数来举例:
int div(int n, int m)
{
if (m == 0)
{
//抛出一个异常
//throw - 1;//throw可以抛出如何类型的对象
throw string("发生一个除零错误");
}
return n / m;
}
int main()
{
try
{
int n = 0, m = 0;
cin >> n >> m;
cout
用法不难,就是向上面一样使用try catch去捕获抛出的异常。这里要注意异常安全问题,就比如在前面new了一段空间,后面还没有delete就抛出异常了,就会导致内存泄露,所以一定要注意异常安全。下面来介绍一些公司会自己定义基类,让其他人去继承这个类,之后就只需要捕获这个基类就行
class Exception
{
public:
Exception(string errmsg, int errid)
:_errid(errid), 服务器托管网_errmsg(errmsg) {};
virtual string what() = 0;
protected:
int _errid; //错误码
string _errmsg; //错误描述
};
class SqlException : public Exception
{
public:
SqlException(string errmsg, int errid)
:Exception(errmsg, errid) {};
virtual string what()
{
return "Sql错误 " + _errmsg;
}
};
class NetworkException : public Exception
{
public:
NetworkException(string errmsg, int errid)
:Exception(errmsg, errid) {};
virtual string what()
{
return "Network错误 " + _errmsg;
}
};
void ServeStart()
{
if (rand() % 3 == 0)
throw SqlException("数据库启动失败", 3);
if (rand() % 11 == 0)
throw NetworkException("网络连接失败", 7);
cout
下面是对异常的总结
//异常规范服务器托管网
//这里表示这个函数可能会抛出A,B, C, D四种异常
//void fun() throw(A, B, C, D);
//表明会抛出内存异常
//void* operator new(std::size_t size) throw(std::bad_alloc);
//表明不会抛出异常
//void* operator delete(std::size_t size, void* ptr) throw();
//void* operator delete(std::size_t size, void* ptr) noexcept;
//异常的优缺点:
//优点:
//1、清晰的包含错误信息
//2、面对多层的函数调用,抛异常可以快速处理,而不用层层递送
//3、面对operator[]这种函数,当数组越界时,可以很好的解决
//4、很多第三方库都使用了异常。我们也使用异常可以更好的使用他们比如:boost、gtest、gmock
//缺点:
//1、他可能会导致内存泄露
//2、异常会导致执行流到处乱窜,造成调试麻烦
//3、C++的库的定义的不好
//4、C++可以抛出如何类型的异常,所以一定要规范,不然在公司就会看到很混乱的抛异常
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
PSO算法 粒子群算法(Particle,Swarm Optimization,PSO)由Kennedy和Eberhart于1995年提出,算法模仿鸟群觅食行为对优化问题进行求解。 粒子群算法中每个粒子包含位置和速度两个属性,其中,位置代表了待求问题的一个候选…