#[cold]
const fn exception() -> Result<(), ()> { Err(()) }
if !throw { Ok(()) } else { exception() }
}
В чём принципиальное отличие такой конструкции от ловли эксепшнов или паник, не считая намного более дешёвый unhappy-path и ненужность OS для выполнения кода?
А если ловится выше на 3 колла?
В том, что тут по сигнатуре функции видно, что код может вернуть некоторую ошибку, и какой именно будет её тип. Вызывающая функция должна будет либо обработать её каким-нибудь образом, либо явно пробросить дальше, что так же отразится на её сигнатуре. То есть, в отличие от исключений, разработчик вынужден явно обработать ошибку
Обсуждают сегодня