프로그래밍 공부/modern C++
modern C++ Lambda
재우이
2022. 2. 25. 17:56
람다 (Lambda)
- 익명함수
- 익명의 함수 객체를 정의
- 성질은 함수 객체와 동일하나 이름이 없는 함수
- 알고리즘이나 비동기 메서드에 전달하는 몇 줄의 코드를 캡슐화하는데 사용
- 타입을 가지고 있지만 decltype 나 sizeof를 사용할 수 없다.
람다 사용법
[captures](parameters){body}(call lambda);
[captures]
캡처 조항(Capture Clause)
- 람다의 body에서 어떤 변수를 어떻게 사용할지 낱
종류 | 내용 |
[] | 같은 영역에 있는 모든 변수 접근 불가 |
[&] | 같은 영역에 있는 모든 변수를 참조로 캡처 |
[=] | 같은 영역에 있는 모든 변수를 값으로 캡처 |
[변수 i] | 같은 영역에 있는 변수 i 만 값으로 캡처, 나머지 다른 변수들에는 접근 불가 |
[&변수 i] | 같은 영역에 있는 변수 i 만 참조로 캡처, 나머지 다른 변수들에는 접근 불가 |
[&, 변수i] | 같은 영역에 있는 모든 변수를 참조로 캡처, 변수 i 만 값으로 캡처 |
[=, &변수i] | 같은 영역에 있는 모든 변수를 값으로 캡처, 변수 i 만 참조로 캡처 |
[] 경우 같은 영역에 있는 변수 접근 불가
[&] 같은 영역에 있는 모든 변수를 참조로 캡처
[=] 같은 영역에 있는 모든 변수를 값으로 캡처
총 코드
#include<iostream>
using namespace std;
int main()
{
/*[]() {cout << "hello world" << endl; }();
[](int i) {cout << "int i : " << i << endl; }(7);
auto sum = [](auto a, auto b) {return a + b; };
cout << sum(3, 1) << endl;*/
int a = 4;
int b = 8;
int c = 6;
//같은 영역에 있는 모든 변수 접근 불가
//[]() {cout << a << endl; }();
/*[&]() {cout << a << endl; }();
[&]() { a = 5; cout << a << endl; }();*/
//[=]() {cout << b << endl; }();
[c]() {cout << c << endl; }()
}