lambda

김대익·2022년 3월 13일

c++은 OOP중심의 프로그래밍언어이다
하지만 새로운 언어가 생기면서 더 쉽게 OOP를 지원해주기 시작했고

자연스럽게 c++은 high performance + OOP라는 포지션을 잡게되었다.

high performance를 위해서는 컴퓨터 구조상 늘 cache hit을 쳐줘야한다.
이를 위해서는 data가 중심이되는 data oriented programming이 들어오게 되면서
lambda expression을 지원하게 되고 어느정도 함수형 프로그래밍을 제공하기 시작했다.


함수형 프로그래밍의 핵심은 함수를 변수처럼 사용할 수 있다는 것이다(자바스크립트 클로저)


Plus 클래스와 main함수 안에[]을 이용한 lambdaPlus3 람다식은 완벽하게 동일하게 동작한다.

컴파일러 익스플로러에서 실행해보면

코드가 동일함을 알 수 있다.


또는 이렇게 선언해서 사용하면


스택메모리에 three변수가 머물게 된다.


만약 변수가 아니라 큰 크기의 객체라고하면 stack에 큰 객체를 넣는 것과 같기때문에
비효율적이다
따라서 레퍼런스로 보내주면


힙에 저장하고 이를 가리키는 방식으로 동작한다


람다에 =를 사용하면 three를 보고 바깥 scope에서 three를 찾아 capture by value를 자동으로 해준다

&를 해주면 capture by reference를 자동으로 해준다


하지만 캡쳐해야할 객체나 변수가 많지않다면 직접 써주는 것이 좋다

0개의 댓글