вторник, 27 июля 2010 г.

struct in for-loop

Не многие знают, и уж совсем почти никто не пользуется, возможностью объявлять в циклах переменные разных типов. Достигается это с помощью неименованной структуры, как показаны ниже:
for( struct {int i; long i2;} x = {1, 1}; x.i2 < mid; x.i++, x.i2 = x.i * x.i )
{
  std::cout << x.i2 << std::endl;
}
Пользователи компилятора от Microsoft, не пытайтесь повторить это дома — это не работает в MSVC++. Те кто пользовался VC6 помнят и другие косяки с переменными в циклах. Можно потренироваться в GNU C++ и в Comeau.

UPDATE (2015-12-22): В Visual Studio 2015 данная фича языка C++ также не поддерживается, но в этой версии MSVS можно выбрать Clang 3.7 в качестве компилятора и тогда сборка будет успешной.

2 комментария:

  1. Даже не могу представить случая, где способ использования структур подобным способом реально бы помог. На мой взгляд, ни эффективности кода, ни размера кода не улучшится, зато читабельность кода только ухудшится. ИМХО

    ОтветитьУдалить
  2. Тут область видимости всех переменных ограничена циклом. Это основное отличие от всех других возможных вариантов. Насколько это важно - решается в каждом конкретном случае.

    ОтветитьУдалить