값으로 람다 캡처: C 0x에서 비상수 캡처 값 보장
C 0x 람다 표현식에서 값으로 캡처할 때 캡처된 값은 값은 자동으로 일정해집니다. 람다 내에서 캡처된 값을 수정해야 하는 경우 문제가 될 수 있습니다.
예를 들어 값으로 구조체 foo를 캡처하는 다음 람다를 고려해 보세요.
<code class="cpp">struct foo { bool operator() (const bool &a) { return a; } }; int main(int argc, char* argv[]) { foo afoo; auto bar = [=] () -> bool { afoo(true); }; return 0; }</code>
이 코드는 foo의 Operator() 메서드가 const로 선언되었기 때문에 컴파일되지 않습니다. 문제를 해결하려면 연산자() 메서드를 const가 아닌 것으로 만들 수 있습니다.
<code class="cpp">struct foo { bool operator() (bool &a) { return a; } };</code>
그러나 이것이 항상 바람직한 해결책은 아닙니다. 경우에 따라 값을 기준으로 캡처하고 싶지만 람다 내에서 수정되지 않도록 해야 할 수도 있습니다.
이를 달성하려면 mutable 키워드를 사용할 수 있습니다. 람다를 [=] () mutable -> bool을 사용하면 람다가 캡처된 값을 수정할 수 있습니다.
예:
<code class="cpp">auto bar = [=] () mutable -> bool { afoo(true); };</code>
이 예에서 람다는 이제 캡처된 afoo 객체를 수정할 수 있습니다. 가치로 포착되지만.
위 내용은 값으로 캡처할 때 C 0x Lambda에서 캡처된 값을 어떻게 수정할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!