C++ 面试题 目录

C++ 中如何抛出异常 (throw)?

推荐答案

在C++中,抛出异常可以使用 throw 关键字。以下是一个简单的示例:

-- -------------------- ---- -------
-------- ----------
-------- -----------

---- -------------- ------ -
    -- ------ - -- -
        ----- ---------------------------- ------ -- -----------
    -
-

--- ------ -
    --- -
        ----------------
    - ----- ------ ---------------------- -- -
        --------- -- ------- -- ---------- - -- -------- -- ----------
    -
    ------ --
-

在这个示例中,checkValue 函数检查传入的值是否为负数。如果是负数,则抛出一个 std::invalid_argument 异常。在 main 函数中,使用 try-catch 块捕获并处理这个异常。

本题详细解读

1. throw 关键字的作用

throw 关键字用于在C++中抛出异常。当程序遇到某些无法继续执行的错误条件时,可以使用 throw 抛出一个异常对象。这个异常对象可以是任何类型的对象,但通常是从 std::exception 派生的类的对象。

2. 抛出异常的基本语法

抛出异常的语法非常简单,只需使用 throw 关键字后跟一个表达式,该表达式的结果将作为异常对象被抛出。例如:

3. 异常类型

C++标准库提供了多种异常类型,如 std::runtime_errorstd::invalid_argumentstd::out_of_range 等。这些异常类型都是从 std::exception 类派生的,因此它们都有一个 what() 方法,用于返回异常的描述信息。

4. 捕获异常

抛出异常后,可以使用 try-catch 块来捕获并处理异常。try 块中包含可能抛出异常的代码,而 catch 块用于捕获并处理异常。例如:

5. 自定义异常

除了使用标准库中的异常类型,你还可以自定义异常类。自定义异常类通常继承自 std::exception 或其派生类,并重写 what() 方法以提供异常的描述信息。例如:

-- -------------------- ---- -------
----- ----------- - ------ -------------- -
-------
    ----- ----- ------ ----- -------- -------- -
        ------ --- ------ -----------
    -
--

---- -------------- -
    ----- --------------
-

6. 异常安全

在编写代码时,应考虑异常安全性。异常安全性指的是在抛出异常时,程序的状态仍然保持一致,不会出现资源泄漏或数据损坏。通常可以通过使用RAII(资源获取即初始化)技术来确保异常安全性。

7. 异常处理的性能

异常处理可能会带来一定的性能开销,尤其是在异常被频繁抛出的情况下。因此,在性能敏感的代码中,应谨慎使用异常处理机制。

纠错
反馈