프로그래밍응용/Modern & STL
Lambda Expression
photoner
2021. 1. 27. 22:52
728x90
반응형
C++에서도 자바스크립트 처럼 익명 함수, 클로져 쓰듯, 사용할 수 있다는게 웹 개발을 해봤던 나로서는 너무 신기하고 놀라웠다. 함수처럼 사용되는 객체 등으로 이미 지원이 되긴 했지만,
위와 같이 준비를 해야 사용이 가능하므로 불편하긴 마찬가지긴 하다. ( 다른 언어에 비하면 )
자 그럼, 람다 표현식은 다음과 같다.
형식은 위와 같은데, 캡처라는 부분이 사실 처음에 잘 와닿지 않았다. 그런데 자세히 보니, 캡처란? 람다 표현식의 바디 내에서 사용할 외부 변수를 지정해주는 구간일 뿐이었다.
바로 예시를 들겠다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
#include <iostream>
#include <string>
int content = 1;
int main(void)
{
std::string str = "IOSTREAM";
int zero = 0;
int plus999 = 999;
std::cout << [zero, plus999, str](int a, int b) -> int {
std::cout << str << std::endl; content = 400; return ((a + b) * zero + plus999);
}(51, 49) << std::endl;
std::cout << "[zero, plus999, str] content = " << content << std::endl;
std::cout << [=](int a, int b) -> int {
std::cout << str << std::endl; content = 200; return ((a + b) * zero + plus999);
}(51, 49) << std::endl;
std::cout << "[=] content = " << content << std::endl;
std::cout << [&](int a, int b) -> int {
std::cout << str << std::endl; content = 400; return ((a + b) * zero + plus999);
}(51, 49) << std::endl;
std::cout << "[&] content = " << content << std::endl;
return 0;
}
|
cs |
728x90
반응형