08 August 2023

C++ 核心指南目录

“Don’t try to catch every exception in every function”

理由

在一个函数中捕获异常,但是又无法进行有意义的恢复动作,会导致代码复杂和性能损失。还是让异常向上传导,直到有一个函数能处理它。还是通过 RAII 在层层解构之后开展清理动作。

错误例子

void f()   // bad
{
    try {
        // ...
    }
    catch (...) {
        // no action
        throw;   // propagate exception
    }
}

强化

  • 标记堆叠递归的 try 语句块
  • 标记函数中 try 语句块太多的代码文件