📜  C++中的捕获块和类型转换(1)

📅  最后修改于: 2023-12-03 15:14:03.610000             🧑  作者: Mango

C++中的捕获块和类型转换

C++中的捕获块是一种异常处理机制,可以在程序出现异常时捕获并处理该异常。捕获块由try、catch和throw关键字组成。

try语句

try语句用于标记可能会抛出异常的代码块。语法如下:

try {
  // 可能会抛出异常的代码块
}
catch语句

catch语句用于捕获和处理异常。语法如下:

try {
  // 可能会抛出异常的代码块
}
catch (ExceptionType e) {
  // 处理异常的代码块
}

ExceptionType是抛出的异常类型,e是捕获的异常对象。如果try块中的代码抛出了异常,那么程序会跳转到第一个匹配ExceptionType的catch块,并执行其中的代码。

可以使用省略号(...)来捕获所有类型的异常:

try {
  // 可能会抛出异常的代码块
}
catch (...) {
  // 处理所有类型的异常
}
throw语句

throw语句用于抛出异常。语法如下:

throw exception_object;

exception_object是抛出的异常对象。通常情况下,exception_object是一个类对象,它包含有关异常的信息。

类型转换

C++中有四种类型转换:static_cast、dynamic_cast、reinterpret_cast和const_cast。它们将一个类型转换为另一个类型。

static_cast

static_cast用于将一种类型的值强制转换为另一种类型。它提供了一种显式的转换方式,但是在运行时不能检查类型安全性。

double d = 3.14;
int i = static_cast<int>(d); // 将浮点数转换为整数
dynamic_cast

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

reinterpret_cast用于将一个指针或引用转换为另一个类型的指针或引用。它仅仅是简单地将一个指针或引用转换为另一种类型的指针或引用,而不做任何检查。

int i = 10;
double d = reinterpret_cast<double&>(i); // 将整数转换为浮点数
const_cast

const_cast用于将一个常量指针或引用转换为非常量指针或引用。

const int i = 10;
int* p = const_cast<int*>(&i); // 将常量指针转换为非常量指针
*p = 20; // 修改指针所指的值