14 August 2023

C++ 核心指南目录

“Avoid error handling based on global state (e.g. errno)”

理由

全局状态很难管理,容易忘记检查。你上一次什么时候测试过 prinft() 的返回值?

请查看:E.25 模拟 RAII

坏例子

int last_err;

void f(int n)
{
    // ...
    p = static_cast<X*>(malloc(n * sizeof(X)));
    if (!p) last_err = -1;     // error if memory is exhausted
    // ...
}

注意

C 风格的错误处理机制是基于全局的 errno 变量。所以,基本上无法避免这种风格。