>  기사  >  백엔드 개발  >  Lambda 함수가 C 0x에서 Const가 아닌 값을 캡처할 수 있습니까?

Lambda 함수가 C 0x에서 Const가 아닌 값을 캡처할 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-02 06:57:29686검색

Can Lambda Functions Capture Non-Const Values in C  0x?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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