#include
#include
#include
std::function make_function(int& x) {
return [&]{ std::cout 코드는 올바르게 작동합니다. 기본 표준 문구를 조사하기 전에이 코드는 C위원회가 의도 한대로 기능한다는 점에 유의해야합니다. 그러나 C 11 표준의 초기 문구는이 문제에 대해 불분명했으며, CWG 문제 2011이 설명을 제공하기 위해 제기되었습니다. 이 문제는 C 표준의 진행중인 개발에서 해결되고있다.
표준 설명
/17은 사본이 캡처 한 Entities 만 참조하는 ID- 표현은 Lambda 유형의 회원 액세스로 변환됩니다. 참조로 캡처 된 엔티티를 언급하는 ID- 표현은 혼자 남겨져 있으며 동일한 엔티티를 계속 유지하는 범위로 표시합니다.
위 코드에서 캡처 된 엔티티는 Lambda의 범위에 도달하는 Make_function 함수의 매개 변수 X입니다. 따라서 Lambda 표현식의 기준 X는 기본 함수에서 선언 된 원래 변수를 나타냅니다. 그러나 평생 밖에서 참조를 참조 할 수있는 시나리오가 제한되어 있습니다. 일반적으로, 참조는 범위로 선언되거나 클래스 멤버이며,이 경우 클래스 자체는 수명 내에 있어야합니다.
따라서 표준은 평생 밖에서 참조의 사용을 명시 적으로 금지하지 않습니다. 이 허점은 Lambda 표현식에서 참조로 참조를 캡처 할 수 있도록 허용했습니다.
CWG 문제 2012 및 향후 설명
CWG 문제 2012는 특정 상황에서 언급이 평생 밖에서 언급 될 수 있다는 감독을 해결하기 위해 제기되었습니다. 이 문제의 해결은 실수로 참조를 참조하여 Lambda 캡처의 사양에 영향을 미쳤습니다. 그러나이 회귀 분석은 C 17이 릴리스되기 전에 수정 될 것으로 예상됩니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3