Разрешен ли компилятору удалить копию, которая требуется для захвата по-значению?
vector<Image> movie1;
apply( [=movie1](){ return movie1.size(); } );
- Есть ли обстоятельства, что компилятору не нужно копировать
movie1
?- Возможно, если компилятор мог знать, что
apply
фактически не изменяетmovie1
? - Или это помогает Lambdas по умолчанию
const
функторы в любом случае?
- Возможно, если компилятор мог знать, что
- Помогает ли это вообще, что
vector
имеет конструктор перемещения и перемещает назначение?- Если да, нужно ли добавлять их в
Image
, чтобы предотвратить дорогостоящую копию здесь?
- Если да, нужно ли добавлять их в
- Есть ли разница в механизме, когда и как требуется копия для захвата по значению по сравнению с аргументами по значению? например.
void operate(vector<Image> movie)
?