06 异常:用还是不用,这是个问题
到现在为止,我们已经有好多次都提到异常了。今天,我们就来彻底地聊一聊异常。 首先,开宗明义,如果你不知道到底该不该用异常的话,那答案就是该用。如果你需要避免使用异常,原因必须是你有明确的需要避免使用异常的理由。 下面我们就开始说说异常。 没有异常的世界 我们先来看看没有异常的世界是什么样子的。最典型的情况就是 C 了。 假设我们要做一些矩阵的操作,定义了下面这个矩阵的数据结构: typedef struct { float* data; size_t nrows; size_t ncols; } matrix; 我们至少需要有初始化和清理的代码: enum matrix_err_code { MATRIX_SUCCESS, MATRIX_ERR_MEMORY_INSUFFICIENT, … }; int matrix_alloc(matrix* ptr, size_t nrows, size_t ncols) { size_t size = nrows * ncols * sizeof(float); float* data = malloc(size); if (data == NULL) { return MATRIX_ERR_MEMORY_INSUFFICIENT; } ptr->data = data; ptr->nrows = nrows; ptr->ncols = ncols; } void matrix_dealloc(matrix* ptr) { if (ptr->data == NULL) { return; } free(ptr->data); ptr->data = NULL; ptr->nrows = 0; ptr->ncols = 0; } 然后,我们做一下矩阵乘法吧。函数定义大概会是这个样子:...