В случае кода, в котором вы должны выполнить очистку ресурса перед выходом из функции, существует ли существенная разница в производительности между этими двумя способами.
Очистка ресурса перед каждым оператором возврата
void func() { login(); bool ret = dosomething(); if(ret == false) { logout(); return; } ret = dosomethingelse(); if(ret == false) { logout(); return; } dootherstuff(); logout(); }Очистка ресурса в блоке finally
void func() { login(); try { bool ret = dosomething(); if(ret == false) return; ret = dosomethingelse(); if(ret == false) return; dootherstuff(); } finally { logout(); } }
Я провел несколько базовых тестов в примерах программ, и, похоже, нет особой разницы. Я очень предпочитаю finallyспособ сделать это, но мне было интересно, не приведет ли это к снижению производительности в большом проекте.
if(!cond), то я сделал это с помощью Java. В C ++, это, как я пишу код оба булевых , а также для других типов - то есть int x; if(!x). Поскольку Java позволяет мне использовать это только для booleans, я полностью прекратил использовать if(cond)& if(!cond)в Java.
(someIntValue != 0)не сравнивать, а не оценивать логические значения. Это пахнет для меня, и я немедленно делаю рефакторинг, когда вижу его в дикой природе.