[capture](return type)
{
source code
}();
// C++
#include <iostream>
int main()
{
int value = 10;
auto func = [value]()
{
value = 20; // 에러
};
}
// C++
#include <iostream>
int main()
{
int value = 10;
auto func = [value]() mutable
{
value = 20;
std::cout << value << std::endl;
};
std::cout << value << std::endl;
func(); // 호출
}
Output:
20
10
int num0 = 10;
int num1 = 20;
auto func = [=] () // 모든 캡처를 값으로.
{
reutrn num0 + num1;
};
auto func = [&] () // 모든 캡처를 레퍼런스로.
{
reutrn num0 + num1;
};
auto func = [&, num0]() // num0은 값, 나머지는 레퍼런스.
{
return num0 + num1;
};
auto func = [=, &num0]() // 나머지는 값, num0은 레퍼런스.
{
return num0 + num1;
};
// C++
#include <iostream>
auto func()
{
int num = 10;
return [&]
{
return num;
};
}
int main()
{
auto f = func();
std::cout << f() << std::endl;
}
// C++
#include <iostream>
struct Test
{
int num = 10;
auto func()
{
return [=]
{
return num;
};
}
};
int main()
{
Test* t = new Test;
auto func = t->func();
delete t;
std::cout << func() << std::endl;
}
Output:
-572662307 // 쓰레깃값 출력.
// C++
#include <iostream>
struct Test
{
int num = 10;
auto func()
{
return [num = num] // initialize capture
{
return num;
};
}
};
int main()
{
Test* t = new Test;
auto func = t->func();
delete t;
std::cout << func() << std::endl;
}
// C++
#include <iostream>
int main()
{
auto func = [](auto value)
{
return value;
};
std::cout << func(10) << std::endl;
std::cout << func("A") << std::endl;
//std::cout << func({ 1,2,3 }) << std::endl; // initiallize list는 불가.
}
Output:
10
A
// C++
#include <iostream>
int main()
{
auto func = []<typename T>(T value)
{
return value;
};
std::cout << func(10) << std::endl;
std::cout << func("10") << std::endl;
}
Output:
10
A