>백엔드 개발 >C++ >값별 캡처 기능이 있는 C 11 람다에서 `mutable` 키워드를 사용하는 시기와 이유는 무엇입니까?

값별 캡처 기능이 있는 C 11 람다에서 `mutable` 키워드를 사용하는 시기와 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-28 01:07:14990검색

When and Why Use the `mutable` Keyword in C  11 Lambdas with Capture-by-Value?

값별 캡처를 위한 C 11 람다의 변경 가능한 키워드

C 11 람다의 값별 캡처를 통해 람다는 다음을 캡처할 수 있습니다. 복사본을 만들어 해당 범위에서 변수를 제거합니다. 그러나 기본적으로 이 복사본은 변경 불가능으로 표시됩니다. 즉, 람다가 이를 수정할 수 없습니다.

가변성에 대한 근거

이 기본 동작의 이유는 기본적인 함수 객체의 원칙: 호출될 때마다 동일한 결과를 생성해야 합니다. 람다가 캡처된 변수를 수정할 수 있다면 이 원칙을 위반하는 것입니다.

변경 가능한 키워드를 사용하여 프로그래머는 람다가 캡처된 변수를 수정할 수 있음을 명시적으로 선언합니다. 값별 캡처는 람다 사용자가 캡처된 임시 항목을 변경할 수 있도록 설계되었기 때문에 이러한 완화가 필요합니다. 이 경우 프로그래머의 통제 하에 수정을 허용하는 것이 합리적입니다.

제공한 코드 조각을 고려하세요.

// ...
// [=](){n = 10;}();          // Error: a by-value capture cannot be modified in a non-mutable lambda

이 코드는 람다가 값으로 n을 캡처하고 mutable 키워드를 사용하지 않고 이를 수정하려고 시도하기 때문에 오류를 발생시킵니다. 이 코드를 유효하게 만들려면 mutable을 사용하세요.

// ...
[=]() mutable {n = 10;}();

결론

값별 캡처를 위한 C 11 람다의 가변 키워드는 함수가 객체는 일반적으로 일관된 결과를 생성해야 합니다. 캡처된 변수를 수정해야 하는 경우 mutable 키워드가 이를 명시적으로 허용합니다. 프로그래머는 이러한 이론적 근거를 이해함으로써 람다를 효과적으로 사용하고 잠재적인 오류를 피할 수 있습니다.

위 내용은 값별 캡처 기능이 있는 C 11 람다에서 `mutable` 키워드를 사용하는 시기와 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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