C++ のラムダ式で [=] した場合、使用されなければコピーされない
ラムダ式のキャプチャで [=] を使用すると全てのローカル変数をコピーしてキャプチャ出来るんですが、ラムダ内で使用されなかった変数はコピーされません。
[ソース]
#include <iostream> struct X{ X(){ std::cout << "X::X()" << std::endl; } X(X const&){ std::cout << "X::X(X const&)" << std::endl; } ~X(){ std::cout << "X::~X()" << std::endl; } X const& operator =(X const&){ std::cout << "operator =(X const)" << std::endl; return *this; } int value = 42; }; int main(){ X x; int n = 7; [=](){ std::cout << n << std::endl; }(); std::cout << "--- copy X ---" << std::endl; [=](){ int n = x.value; std::cout << n << std::endl; }(); return 0; }
[出力]
X::X() 7 --- copy --- X::X(X const&) X::~X() 42 X::~X()