В этот раз, в качестве идиом, будут описаны нестандартные виды утверждений (assert’ов), о которых знают лишь немногие.
Выражения assert(0), assert(false), assert(null) и подобные им ложные утверждения во время компиляции не дают обычных, типовых утверждений.
Вместо создания утверждений, эти выражения приводят к падению программы (crash of program) и не удаляются компилятором при применении опции -release.
string getStuff() { if(expr) return "something"; assert(1 < 0); // так можно делать, но обычно используют "assert(0)" // return не нужен, так как программа просто потерпела крах }
Утверждение assert(false) также обозначает тот факт, что функция не обязана ничего возвращать, так как в случае применения assert(false) произойдет крах программы.
Но это не означает, что функция не дает никаких эффектов, напротив, утверждения такого типа говорят о немедленном падении программы и компилятор не будет вырезать такие assert’ы.
Читаю статью, и понимаю, что у меня включен adblock — «Реклама» в сайдбаре пуста. Ладно, надо уважить дружественный ресурс. Выключаю Adblock, обновляю страницу. И тут!…
http://imgur.com/fGYBFtr
Злые вы, товарищи. Так и заикой недолго остаться.
Кстати, ссылка на идиомы битая (относительная, а не абсолютная)
Неплохо, ни разу такого не попадалось)) И это не мы злые, а гугл. За ссылку спасибо, поправили.