异常处理时一共需要用到 3 个关键字:throw、try、catch。
throw:当问题出现时,程序会抛出一个异常。这是通过使用 throw 关键字来完成的。 try 块中的代码标识将被激活的特定异常。它后面通常跟着一个或多个 catch 块。 catch:在您想要处理问题的地方,通过异常处理程序捕获异常。catch 关键字用于捕获异常。`
#include <iostream>
#include <exception>
using namespace std;
void throwInt()
{
throw 1;
}
void throwDouble()
{
throw 0.1;
}
int main()
{
try
{
throwInt();
}
catch(int i)
{
cerr << i << endl;
}
catch(double d)
{
cerr << d << endl;
}
return 0;
}`
抛出异常并捕获
```cpp
#include <iostream>
#include <exception>
using namespace std;
int main()
{
try
{
throw out_of_range("out of range.");
}
catch(const std::exception& e)
{
std::cerr << e.what() << endl;
}
return 0;
}
访问C++标准库时的异常处理
```cpp
```cpp
#include <iostream>
#include <exception>
using namespace std;
int main()
{
// 异常并捕获
try
{
vector<int> arr = {1, 2, 3};
// 越界访问,抛出异常
cout << "arr: " << arr.at(3) << endl;
}
catch(const std::exception& e)
{
std::cerr << e.what() << endl;
}
return 0;
}
自定义异常
```cpp
```cpp
```cpp
#include <iostream>
#include <exception>
using namespace std;
class custom_exception : public exception
{ // base of all out-of-range exceptions
public:
typedef exception _Mybase;
explicit custom_exception(const string& _Message)
: _Mybase(_Message.c_str())
{ // construct from message string
}
explicit custom_exception(const char *_Message)
: _Mybase(_Message)
{ // construct from message char*
}
};
int main()
{
// 程序抛出异常并捕获
try
{
throw custom_exception("custom exception.");
}
catch(const std::exception& e)
{
std::cerr << e.what() << endl;
}
return 0;
}
|