Когда я пишу лямбду с [=]
, значит ли это, что все мои локальные переменные будут скопированы в члены созданной структуры или я могу предположить, что будут только те, которые реально используются в лямбде? Например:
void f()
{
vector<int> v(10000);
const int n = 5;
const int DivByNCnt = count_if(istream_iterator<int>(cin), istream_iterator<int>(),
[=](int i)
{
return i % n == 0;
});
}
Что из следующего, если таковое имеется, верно?
- оба n и v будут скопированы
- n будет скопировано, v не будет
- n будет скопировано, v может быть скопировано или не скопировано в зависимости от настроек реализации/оптимизации.
Предположим ради аргумента, что конструктор копирования вектора имеет побочные эффекты.
n
, было бы полным безумием по отношению к семантике любого другого языка с первоклассными анонимными функциями и правильными замыканиями. - person Gian   schedule 25.03.2013