C ++ 0x: Захват по значению для лямбда, всегда копия?

Разрешено ли компилятору удалить копию , которая требуется для захвата по значению ?

vector<Image> movie1;
apply( [=movie1](){ return movie1.size(); } );
  • Есть ли какое-либо обстоятельство, что компилятору не нужно копировать movie1 ?
    • Может быть, если бы компилятор знал, что apply на самом деле не изменяет movie1 ?
    • Или помогает то, что лямбды по умолчанию const функторов в любом случае?
  • Помогает ли то, что вектор имеет конструктор перемещения и назначает перемещение ]?
    • Если да, нужно ли добавлять их в Изображение , чтобы предотвратить дорогостоящую копию здесь?
  • Есть ли разница в механизме, когда и как требуется копия для ] захват по значению по сравнению с аргументами по значению ? например. void operation (vector movie) ?
14
задан Fred Foo 12 March 2011 в 15:49
поделиться