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
반응형
'프로그래밍응용 > Modern & STL' 카테고리의 다른 글
멀티 쓰레딩 지원 (0) | 2021.02.10 |
---|---|
함수 포인터를 대체하는 std::function (0) | 2021.02.08 |
R-Value, Copy Elision, 이동 생성자, RVO, NRVO (0) | 2021.01.26 |
자료형 추론 auto / 범위 기반 for (0) | 2021.01.21 |
Iterator 사용 방법 예시 (0) | 2021.01.05 |