Код 1, IMO, наихудший, поскольку он не сразу передает значение намерения, которое заключается в создании отчета только при определенных обстоятельствах.
Использование:
if (condition_1) return false;
if (condition_2) return false;
...
будет лучше.
Кроме того, что мне не нравится в коде 1, так это то, что он пытается замаскировать gotos, используя while и breaks (которые являются gotos). Тогда я предпочел бы использовать непосредственно goto, по крайней мере, было бы легче увидеть, где находится точка приземления.
Код 2 может быть отформатирован так, чтобы он выглядел красиво, я думаю:
bool MyApplication::ReportGenerator::GenerateReport(){
if (!isAdmin() || !isConditionOne() ||
!isConditionTwo() || !isConditionThree()) {
return false;
}
return generateReport();
}
Или что-то подобное.