
c++ Lambda
DevCho1107
·2023. 5. 23. 00:29
C++ 람다(lambda)는 익명 함수를 생성하는 기능으로, 함수 객체를 간단하게 정의하고 사용할 수 있는 방법을 제공합니다. 람다는 주로 함수형 프로그래밍이나 콜백 함수 등에서 유용하게 사용됩니다. C++11부터 도입되었으며, 람다는 코드의 가독성과 편의성을 높여줍니다.
람다의 기본 구문은 다음과 같습니다:
[capture](parameters) -> return_type {
// 함수 내용
}
capture: 람다 함수에서 외부 변수를 사용할 때 해당 변수를 캡처합니다. 캡처는 [] 안에 위치하며, 기본적으로 외부 변수에 접근할 수 없습니다. 필요한 변수를 캡처하려면 캡처 리스트에 변수를 명시해야 합니다. 예를 들어 x와 y를 캡처하려면 [x, y]와 같이 씁니다. 캡처에는 값 캡처([=]), 참조 캡처([&]), 믹스 캡처([=, &x] 또는 [&, x]와 같이) 등의 다양한 옵션도 있습니다.
parameters: 함수의 매개변수를 지정합니다.
return_type: 함수의 반환 타입을 지정합니다. 생략 가능하며, 생략 시 자동으로 반환 타입이 추론됩니다.
{}: 함수의 내용을 중괄호로 감싸줍니다.
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> numbers = {5, 2, 8, 3, 1, 6};
// 람다를 사용한 정렬
std::sort(numbers.begin(), numbers.end(), [](int a, int b) {
return a < b;
});
// 람다를 사용한 반복문
std::for_each(numbers.begin(), numbers.end(), [](int num) {
std::cout << num << " ";
});
return 0;
}
사용 시 주의할 점으로는, 캡쳐한 변수의 주솟값이 비동기 람다의 경우 바뀌어 있을 수 있고, 해제되어 있을 수 있다.
게임 서버에서 예를 들자면, DB쪽에 별도의 스레드를 통해 요청한 쿼리에 대한 콜백, 혹은 서버간의 메세지 콜백의 경우가 있을 수 있겠다.
위의 경우 서버가 바로 crash 날수도 있고, 다른 주솟값 혹은 쓰레기값으로 인해 정말 더 큰 사고가 터질 수 있음에 유의하자.
'< Programming > > C++' 카테고리의 다른 글
std::next와 std::advance의 차이점 (0) | 2023.06.08 |
---|---|
c++ 11 std::function (0) | 2023.05.23 |
emplace_back (0) | 2023.05.08 |
constexpr ( generalized constant expressions ) (0) | 2023.05.04 |
C++ 17 에서 업데이트 된 기능 정리. (0) | 2023.04.25 |