Я слышал и читал много раз, что лучше поймать исключение как ссылку на-const, а не как ссылку. Почему
try {
// stuff
} catch (const std::exception& e) {
// stuff
}
лучше, чем
try {
// stuff
} catch (std::exception& e) {
// stuff
}
Я слышал и читал много раз, что лучше поймать исключение как ссылку на-const, а не как ссылку. Почему
try {
// stuff
} catch (const std::exception& e) {
// stuff
}
лучше, чем
try {
// stuff
} catch (std::exception& e) {
// stuff
}
Вам нужно:
Последнее не так важно, как первое, но единственная настоящая причина для отказа от const должна означать, что вы хотите делать изменения в исключении (обычно полезно только в том случае, если вы хотите перебросить его с добавленным контекстом в более высокий уровень).
В принципе нет причин.
Объекты исключений живут в своем собственном пространстве памяти & dagger; поэтому вам не нужно беспокоиться о том, чтобы улавливать исключения, созданные во временных выражениях.
Все, что вы делаете, обещает, что вы не будете модифицировать объект исключения, но поскольку объекты исключений должны иметь неизменяемый интерфейс & Dagger; здесь действительно нет ничего практичного.
Однако, это может заставить вас чувствовать себя тепло и уютно, когда вы его читаете; что это для меня!
& dagger; У них есть собственный, специальный, потоковый локальный стек.
& Dagger; Отказ от ответственности: Boost.Exception разрывает это, чтобы делать фанки и добавлять детали исключения, пост-строительство. Но это хакерство!
Он сообщает компилятору, что вы не будете вызывать какую-либо функцию, которая модифицирует исключение, что может помочь оптимизировать код. Наверное, это не имеет большого значения, но стоимость его тоже очень мала.
По той же причине вы используете const.
Вы собираетесь изменить исключение? если нет, это может быть const. по той же причине вы ДОЛЖНЫ использовать const где-нибудь еще (я говорю СЛЕДУЕТ, потому что на самом деле это не так сильно влияет на поверхность, может помочь компиляторам, а также помогает кодировщикам правильно использовать ваш код и не делать то, что им не нужно)
обработчики исключений могут быть специфичными для платформы и могут помещать исключения в забавные места, потому что они не ожидают их изменения?