24 July 2023

C++ 核心指南目录

“Use exceptions for error handling only”

理由

要把出错处理的代码和普通代码分开。C++ 的优化实现,倾向于假定异常情况很少出现。也就是说,默认不太会有很多异常情况要处理。

错误例子

// don't: exception not used for error handling
int find_index(vector<string>& vec, const string& x)
{
    try {
        for (gsl::index i = 0; i < vec.size(); ++i)
            if (vec[i] == x) throw i;  // found x
    }
    catch (int i) {
        return i;
    }
    return -1;   // not found
}

这段代码把事情弄复杂了,而且可能运行速度会更慢些。在一个 vector 中查找一个值一点也不“异常”。

强化

可能需要一些启发式的探索。检查异常值从 catch 语句中“泄漏”出去的情况。