面试题答案
一键面试-
异常的抛出:
- 在C++中,使用
throw
关键字来抛出异常。throw
可以抛出任何类型的值,包括内置类型(如int
、double
等)、自定义类型(类)等。例如:
void divide(int a, int b) { if (b == 0) { throw "Division by zero"; } std::cout << "Result: " << a / b << std::endl; }
- 这里当
b
为0时,抛出一个const char*
类型的异常,表示“Division by zero”。
- 在C++中,使用
-
异常的捕获:
- 异常通过
try - catch
块来捕获。try
块包含可能抛出异常的代码。catch
块用于捕获并处理特定类型的异常。例如:
int main() { try { divide(10, 0); } catch (const char* msg) { std::cerr << "Caught exception: " << msg << std::endl; } return 0; }
- 在上述代码中,
try
块调用divide
函数,该函数可能抛出异常。catch
块捕获const char*
类型的异常,并输出错误信息。
- 异常通过
-
函数调用链中异常传递的规则:
- 当一个函数抛出异常时,如果该函数内部没有捕获异常,异常会沿着函数调用链向上传递,直到被某个
catch
块捕获。 - 例如:
void functionC() { throw 42; } void functionB() { functionC(); } void functionA() { try { functionB(); } catch (int e) { std::cerr << "Caught in functionA: " << e << std::endl; } } int main() { functionA(); return 0; }
- 在这个例子中,
functionC
抛出一个int
类型的异常,functionB
没有捕获这个异常,异常继续向上传递到functionA
,functionA
通过catch (int e)
捕获到该异常并处理。如果functionA
也没有捕获异常,异常会继续向上传递到main
函数,若main
函数也不捕获,程序将调用std::terminate
终止运行。
- 当一个函数抛出异常时,如果该函数内部没有捕获异常,异常会沿着函数调用链向上传递,直到被某个