Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

лямда в c11 польза или извращение?

16.12.17 15:45
Re: лямда в c11 польза или извращение?
 
  ilghiz постоялец
в ответ anly 16.12.17 10:19, Последний раз изменено 16.12.17 17:44 (ilghiz)

> Это обычные функции, с телом внутри других функций или есть какие другие особенности?

да, это GNUтое расширение, появившееся еще в конце 90х, кажется студия их категорически до сих пор не поддерживает


> Имеют ли они доступ к локальным переменным внешней функции?

да, к тем, которые определены до описания этой нестед функции


> но код с нестед функциями читается на порядок проще, чем с лямбдой.

> пример можно?


void f(double *x, double *y, int K)

{ int N, M;

voiid nested(double A[M][K])

{ // переменная N видна, но L уже нет

... A[j]...

}

int L;

...

nested_ptr=nested; // не определено, если будет передано назад и вызвано после окончания работы f, но должно работать, если вызвали пока управление еще не вернулось из f


nested(x);

...

}


в данном случае я вижу реальную пользу от этой нестед функции в том, что она маппит кусок памяти из x в виде двухмерного массива A[][] и использует его по назначению, код становится компактным и хорошо читаемым, а производительность не падает приближаясь к тому, что могло быть, если бы код был бы написан, например, на фортране.

 

Перейти на