>백엔드 개발 >C++ >값으로 캡처할 때 C 0x Lambda에서 캡처된 값을 어떻게 수정할 수 있습니까?

값으로 캡처할 때 C 0x Lambda에서 캡처된 값을 어떻게 수정할 수 있습니까?

DDD
DDD원래의
2024-11-04 13:44:02776검색

How Can I Modify Captured Values in C  0x Lambdas When Capturing by Value?

값으로 람다 캡처: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.