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 = 400return ((a + b) * zero + plus999); 
    }(5149<< std::endl;
    std::cout << "[zero, plus999, str] content = " << content << std::endl;
 
    std::cout <<  [=](int a, int b) -> int {
        std::cout << str << std::endl; content = 200return ((a + b) * zero + plus999);
    }(5149<< std::endl;
    std::cout << "[=] content = " << content << std::endl;
 
    std::cout <<  [&](int a, int b) -> int {
        std::cout << str << std::endl; content = 400return ((a + b) * zero + plus999);
    }(5149<< std::endl;
    std::cout << "[&] content = " << content << std::endl;
 
    return 0;
}
cs

728x90
반응형