📅  最后修改于: 2023-12-03 15:14:03.610000             🧑  作者: Mango
C++中的捕获块是一种异常处理机制,可以在程序出现异常时捕获并处理该异常。捕获块由try、catch和throw关键字组成。
try语句用于标记可能会抛出异常的代码块。语法如下:
try {
// 可能会抛出异常的代码块
}
catch语句用于捕获和处理异常。语法如下:
try {
// 可能会抛出异常的代码块
}
catch (ExceptionType e) {
// 处理异常的代码块
}
ExceptionType是抛出的异常类型,e是捕获的异常对象。如果try块中的代码抛出了异常,那么程序会跳转到第一个匹配ExceptionType的catch块,并执行其中的代码。
可以使用省略号(...)来捕获所有类型的异常:
try {
// 可能会抛出异常的代码块
}
catch (...) {
// 处理所有类型的异常
}
throw语句用于抛出异常。语法如下:
throw exception_object;
exception_object是抛出的异常对象。通常情况下,exception_object是一个类对象,它包含有关异常的信息。
C++中有四种类型转换:static_cast、dynamic_cast、reinterpret_cast和const_cast。它们将一个类型转换为另一个类型。
static_cast用于将一种类型的值强制转换为另一种类型。它提供了一种显式的转换方式,但是在运行时不能检查类型安全性。
double d = 3.14;
int i = static_cast<int>(d); // 将浮点数转换为整数
dynamic_cast用于将一个指针或引用转换为另一个类型的指针或引用。它可以用于类层次结构中,如果转换不安全,则返回空指针或引用。
class Base {
public:
virtual void print() { cout << "Base\n"; }
};
class Derived : public Base {
public:
void print() { cout << "Derived\n"; }
};
Base* b = new Derived();
Derived* d = dynamic_cast<Derived*>(b); // 将Base指针转换为Derived指针
if (d != nullptr) {
d->print(); // 输出 "Derived"
}
reinterpret_cast用于将一个指针或引用转换为另一个类型的指针或引用。它仅仅是简单地将一个指针或引用转换为另一种类型的指针或引用,而不做任何检查。
int i = 10;
double d = reinterpret_cast<double&>(i); // 将整数转换为浮点数
const_cast用于将一个常量指针或引用转换为非常量指针或引用。
const int i = 10;
int* p = const_cast<int*>(&i); // 将常量指针转换为非常量指针
*p = 20; // 修改指针所指的值