C 11의 가변성과 람다 값별 캡처
C 11의 Lambda 표현식을 사용하면 다음 중 하나를 통해 외부 변수를 캡처할 수 있습니다. 참조 또는 값으로. 그러나 값으로 캡처하는 경우 기본적으로 mutable 키워드가 필요합니다. 이는 특히 이름이 지정된 함수에 전달되는 기존 매개변수에는 변경 가능성이 필요하지 않다는 점을 감안할 때 그 필요성에 대한 의문을 불러일으켰습니다.
변경 가능성에 대한 이론적 근거
주요 차이점은 함수 객체로서의 람다의 본질. 이는 호출할 때마다 일관된 결과를 생성하도록 설계되었습니다. 람다 식이 캡처된 변수를 변경 가능으로 선언하지 않고 변경할 수 있다면 이 원칙을 위반하는 것입니다. 결과적으로 컴파일러 기본값은 값별 캡처 변수가 수정되지 않은 상태로 유지되어야 한다고 가정합니다.
변경 가능한 선언
변경 가능한 키워드를 사용하면 캡처의 명시적인 수정이 가능합니다. 람다 표현식 내의 값 기준 변수. 이는 함수 개체가 현재 상태에 따라 다르게 동작하도록 의도되었음을 인정합니다. 예를 들어, 아래 람다는 실행될 때마다 카운터를 증가시킵니다.
int n = 0; [mutable](){ n++; }();
의미 및 대안
값별 캡처의 가변성에 대한 요구 사항은 다음을 보장합니다. 람다는 결정론적 동작을 유지합니다. 또한 캡처된 변수가 외부에서 수정되지 않는 많은 경우 참조별 캡처가 필요하지 않습니다. 그러나 mutable을 과도하게 사용하면 코드 명확성이 저하되고 잠재적인 부작용이 발생할 수 있다는 점은 주목할 가치가 있습니다.
위 내용은 값으로 캡처하는 C 11 Lambda가 기본적으로 변경 가능한 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!