c++ 람다 표현식 예제

람다 식은 호출 가능한 개체를 사용하는 함수에 대한 인수로 자주 사용됩니다. 명명된 함수를 만드는 것보다 간단할 수 있으며 인수로 전달될 때만 사용됩니다. 이러한 경우 lambda 식은 함수 개체를 인라인으로 정의할 수 있으므로 일반적으로 선호됩니다. 알다시피, 당신은 쉽게 정규 표현으로이 작업을 수행 할 수 있습니다. 하지만 원하지 않는다고 가정해 봅시다. Visual Studio 2017 버전 15.3 이상(/std:c++17에서 사용 가능): 이 포인터는 캡처 절에서 *this를 지정하여 값으로 캡처할 수 있습니다. 값으로 캡처한다는 것은 람다 식을 포함하는 익명 함수 개체인 전체 클로저가 람다 호출되는 모든 호출 사이트에 복사된다는 것을 의미합니다. 값별 캡처는 lambda가 특히 NUMA와 같은 특정 하드웨어 아키텍처에서 병렬 또는 비동기 작업에서 실행될 때 유용합니다. 람다(암시적 또는 명시적으로)에 의해 캡처된 모든 엔터티는 람다 식에서 odr-사용됩니다(따라서 중첩된 람다에 의한 암시적 캡처는 둘러싸는 람다에서 암시적 캡처를 트리거합니다). 람다 식을 두 번 이상 사용해야 하는 경우 동일한 코드를 복사하는 것이 번거로울 수 있으므로 lambda 표현식에 대한 포인터를 사용할 수 있습니다.

그런 다음 일반 함수처럼 처리하고 함수 포인터에 할당할 수 있습니다. 캡처가 없는 람다를 사용하는 함수 포인터를 사용하는 예는 다음과 같습니다: 람다 식의 결과 개체는 다른 함수 개체와 마찬가지로 operator()를 사용하여 호출할 수 있는 클로저입니다. 기본값은 무효화됩니다. 간단한 return 식이 있는 경우 컴파일러는 반환 값의 형식을 추론합니다: lambda 식은 변수가 lambda 식의 본문을 실행하는 경우 변수를 캡처하지 않고 변수를 사용할 수 있습니다. 변수에 액세스할 때 캡처된 복사본(복사본으로 캡처한 엔터티) 또는 원래 개체(참조로 캡처한 엔터티)에 액세스합니다. lambda 식에서 가변 키워드를 사용하지 않는 한 함수 호출 연산자는 const-qualified이고 복사로 캡처된 개체는 이 연산자() 내부에서 수정할 수 없습니다. 함수 호출 연산자는 휘발성 인증이 없으며 가상이 없습니다. 앞서 말했듯이 캡처 블록에 정적 이외의 로컬 변수만 저장할 수 있습니다. 그러나 인생에서 자주 그처럼 차이가 있습니다. 주변 오브젝트를 다음과 같이 저장할 수도 있습니다.

이것은 둘러싸는 개체에 대한 포인터이므로 이를 캡처하면 Lambda 식은 익명 함수입니다. 그들은 둘러싸는 클래스에 숨겨져 있지 않은 경우 대부분의 경우 더 나은 가독성을 제공하는 코드의 작은 조각입니다. 그건 그렇고, C ++에서, 그 둘러싸는 클래스는 functor 또는 함수 객체라고합니다. 우리는 잠시 안에 그들을 덮을 것입니다. 의 우리의 예로 다시 가자입니다사이제로앤텐.

Ce contenu a été publié dans Non classé par samuel. Mettez-le en favori avec son permalien.