Lambda 캡처 및 수정 가능한 캡처 값
C 0x에서 람다 표현식은 지역 변수를 캡처하는 강력한 수단을 제공합니다. 그러나 기본적으로 값으로 캡처된 변수는 const로 처리됩니다. 이로 인해 캡처된 값을 수정해야 하는 라이브러리로 작업할 때 제한이 발생할 수 있습니다.
다음 시나리오를 고려하십시오.
<code class="cpp">struct foo { bool operator() (const bool &a) { return a; } }; int main() { foo afoo; // Attempt to capture non-const reference by value auto bar = [=]() -> bool { afoo(true); }; }</code>
캡처된 값 afoo를 수정하려는 시도로 인해 이 코드가 컴파일되지 않습니다. 비-const 멤버 함수 afoo::operator() 내에서.
해결책: 가변 람다 사용
캡처된 변수를 수정하는 기능을 유지하면서 값으로 캡처하려면 , mutable 키워드를 사용할 수 있습니다. 람다를 변경 가능으로 선언하면 캡처된 값을 포함하여 내부 상태를 수정할 수 있습니다.
<code class="cpp">auto bar = [=]() mutable -> bool { afoo(true); };</code>
이 수정된 예에서 람다의 연산자()는 캡처된 afoo를 수정하여 컴파일을 해결하는 것이 허용됩니다. 오류. 변경 가능한 키워드가 없으면 캡처된 비 const 값으로 인해 람다는 const로 간주됩니다.
위 내용은 Lambda 함수가 C 0x에서 Const가 아닌 값을 캡처할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!