본문 바로가기

프로그래밍/C++

C++11 람다식 정리(lamda)




[my_mod](int v_)->int{return v_ % my_mod;} //클로져 (Closure) 객체라고 명명



[] : 아무것도 캡처하지 않음


[&x] : x만 Capture by reference


[x] : x만 Capture by value


[&] : 모든 외부 변수를 Capture by reference


[=] : 모든 외부 변수를 Capture by value


[x, y] : x, y 를 Capture by value


[&x, y] : x는 Capture by reference, y는 Capture by value


[&x, &y] : x, y 를 Capture by reference


[&, y] : y 를 제외한 모든 값을 Capture by reference


[=, &x] : x 를 제외한 모든 값을 Capture by value


[this]: this pointer를 capture by value로 가져온다.



auto func = []{ return 3.14; }; // 가능


auto func = [](float f){ return f; }; // 가능


auto func = []()->float{ return 3.14; }; // 가능




C++14 에서 제너릭람다 사용가능 - auto를 파라미터로 받을 수 있음


auto vglambda = [](auto printer) { return 123; }; //vs2015 에서 가능



std::bind - 람다에 비해 가독성 및 성능이 떨어지므로 가급적 지향


스캇메이어스는 c++11 에서 람다가 bind보다 거의 우월하다고 한다.


c++14에서는 람다가 bind보다 확실히 낫다고 하니 람다를 무조건 권장한다.



std::function이란 타입을 쓰기 위해서는 <functional> 헤더필요



'프로그래밍 > C++' 카테고리의 다른 글

string::shrink_to_fit  (0) 2016.02.24
C++ 컴파일오류 빌드오류 링크  (0) 2016.02.12
Visual C++ 데이터 형식(범위)  (0) 2016.01.29
매크로(define) 재정의 충돌문제 해결  (0) 2016.01.26
C++11 enum class  (0) 2016.01.21