Мастер Ломастер писал(а):я не вникал глубоко в рекомендованную ссылку. но подозреваю, что основной смысл хитростей с С++ в том, что благодаря локальной переменной цикла for получается доступ к методам объекта какого-то класса... и эта переменная при досрочном выходе из цикла уничтожается с вызовом деструктора...
Локальную переменную и в С можно сделать в любом блоке, в С++ отработают конструкторы-деструкторы:
Код: Выделить всё
void foo()
{
some_type_t a;
{
some_type_t b; // ещё более локальная
}
// тут b уже пропала, в С++ ещё и отработал деструктор
}
так что это не принципиально.
В макросах законченные куски кода часто заворачивают в do {} while(0), создавая внутри локальные переменные (для которых в С++ будет все то же с конструкторами/деструкторами). Но то законченные куски кода.
В С++ отработает еще и деструктор переменной, созданной в выражении инициализации for(;;), но в данном случае речь не об этом.
Только for() {} даёт возможнсть сделать заголовок для куска кода, а сам код прилепить потом после него. Но при этом задать кусочеки кода, выполняемые до и после после прилепленного фрагмента.
В примере по ссылке используется именно эта возможность.
Она же использовалась в моём примере с BREAKABLE_BLOCK
Возможность задать весь заголовок перед блоком кода удобна и тем, что сразу видно, что к чему. И тем, что не вынуждает писать что-то ещё в конце блока -- и это тоже используется как в моём примере, так и в примере с исходников.ру. Можно же было задать два макроса, BOOST_FOREACH_BEGIN и BOOST_FOTEACH_END, использовав во втором в том числе } while(0) как супер-скобку. Или BREAKABLE_BLOCK_BEGIN / _END (какая разница, писать комментарий после do { о том, что это не цикл, или макрос с сомодокументированным именем).
Но именно этого и хотелось избежать.
Мастер Ломастер писал(а):можно сделать просто
То, что Вам кажется, что можно сделать просто -- может означать то, что Вы просто не видите, в чём сложность. Ну как с размером статического массива...
Мастер Ломастер писал(а):но делается с переподвыподвертом - подозреваю, чтобы потом иметь возможность всем объяснять, демонстрируя наличие тех самых знаний
Да, да, я знаю, а еще зеркалки -- чистые понты для демонстрации наличия денег, в мобилке аппарат и побольше мегапикселей бывает.
В "Жестоком романсе" сцена отличная с переклеиванием этикеток на бутылках с винами.
И у Райкина про соседа смогонщика -- «Ни разу не видел, чтобы он за водкой бегал! Значит сам гонит!»
Уж извините, но ассоциации с Вашими словами только такие.