>백엔드 개발 >C++ >C 11 람다에서 값별 캡처에 `mutable` 키워드가 필요한 이유는 무엇입니까?

C 11 람다에서 값별 캡처에 `mutable` 키워드가 필요한 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-07 00:04:111002검색

Why is the `mutable` Keyword Necessary for Capture-by-Value in C  11 Lambdas?

값별 캡처에서 "변경 가능"에 대한 C 11 Lambda 요구 사항 탐색

C 11에서 값으로 캡처된 람다는 기능적으로 불변입니다. 기본적으로 캡처된 값입니다. 이 동작을 수정하려면 람다 범위 내에서 수정이 가능하도록 "mutable" 키워드를 사용합니다.

다음 예를 고려하세요.

int main() {
    int n;
    [&]() { n = 10; }(); // OK, captures by reference

    [=]() mutable { n = 20; }(); // OK, captures by value with "mutable"

    // [=](){n = 10;}(); // Error, cannot modify by-value capture without "mutable"

    std::cout << n << "\n"; // Prints "10"
}

질문이 생깁니다. 왜 "mutable"이 "mutable"입니까? 값으로 캡처하는 데 필요한 키워드는 무엇입니까?

일반적으로 명명된 함수에 전달된 매개변수는 암시적으로 변경 가능하므로 수정이 가능합니다. 함수 내에서. 그러나 람다는 고유한 동작을 도입하는 참조별 캡처 및 값별 캡처 메커니즘을 모두 제공합니다.

기본적으로 값별 캡처는 외부 변수의 복사본을 생성하며 람다는 이 임시 값으로 작동합니다. "mutable"이 없으면 캡처된 값을 수정하려고 시도하면 함수 객체의 불변성 원칙을 위반하므로 컴파일러 오류가 발생합니다.

따라서 "mutable" 키워드는 내부 수정을 명시적으로 허용하기 위해 도입되었습니다. 값으로 캡처하는 람다. 이는 캡처된 복사본이 변경 가능한 것으로 처리될 수 있다는 신호를 컴파일러에 보내 보다 전통적인 함수와 유사한 동작으로 돌아갑니다.

요약하면 C에서 값별 캡처에는 "mutable" 키워드가 필요합니다. 11개의 람다는 함수 개체의 출력이 입력과 일관되게 유지되는 동시에 람다 범위 내에서 캡처된 복사본을 수정할 수 있도록 하기 때문입니다.

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

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