C++ throw(抛出异常)详解
抛出(Throw)--> 检测(Try) --> 捕获(Catch)
异常必须显式地抛出,才能被检测和捕获到;如果没有显式的抛出,即使有异常也检测不到。
在 C++ 中,我们使用 throw 关键字来显式地抛出异常,它的用法为:
throw exceptionData;
exceptionData 是“异常数据”的意思,它可以包含任意的信息,完全有程序员决定。exceptionData 可以是 int、float、bool 等基本类型,也可以是指针、数组、字符串、结构体、类等聚合类型,请看下面的例子:
char str[] = "hello world 666";
char *pstr = str;
class Base{
};
Base obj;
throw 100;//int 类型
throw str;//数组类型
throw pstr;//指针类型
throw obj;//对象类型
动态数组的例子
C/C++ 规定,数组一旦定义后,它的长度就不能改变了;换句话说,数组容量不能动态地增大或者减小。这样的数组称为静态数组(Static array)。静态数组有时候会给编码代码不便,我们可以通过自定义的 Array 类来实现动态数组(Dynamic array)。所谓动态数组,是指数组容量能够在使用的过程中随时增大或减小。
#include <iostream>
#include <cstdlib>
using namespace std;
//自定义的异常类型
class OutOfRange
{
public:
OutOfRange() : m_flag(1) {
};
OutOfRange(int len, int index) : m_len(len), m_index(index), m_flag(2) {
}
public:
void what() const; //获取具体的错误信息
private:
int m_flag; //不同的flag表示不同的错误
int m_len; //当前数组的长度
int m_index; //当前使用的数组下标
};
void OutOfRange::what() const
{
if (m_flag == 1)
{
cout << "Error: empty array, no elements to pop." << endl;
}
else if (m_flag == 2)
{
cout << "Error: out of range( array length " << m_len << ", access index " << m_index << " )" << endl;
}
else
{
cout

本文深入探讨了C++中的异常处理机制,包括throw用于抛出异常,try用于检测异常,catch用于捕获异常。通过一个动态数组的实现示例展示了异常在实际编程中的应用,以及自定义异常类型和异常规范的使用。同时,文章讨论了异常规范在不同编译器下的行为差异,并指出在C++11中已不推荐使用异常规范。
详解&spm=1001.2101.3001.5002&articleId=121286604&d=1&t=3&u=481875d3f68c4f8e9952c508ecb5234f)
9082

被折叠的 条评论
为什么被折叠?



