Error handling
E.3
Используйте исключения только для обработки ошибок
Причина
Чтобы отделить обработку ошибок от "обычного кода". Реализации 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.