c ++ 11 람다는 사용하지 않는 변수를 캡처합니까?
내가 사용하는 경우 [=]
나, 람다의 값으로 캡처 할 모든 지역 변수를 원하는에서 그 결과 것을 나타 내기 위해 모든 함수에서 지역 변수 복사, 아니면 그냥 모든 지역 변수되는 람다 사용하는 ?
예를 들어 내가 가지고있는 경우 :
vector<int> my_huge_vector(100000);
int my_measly_int;
some_function([=](int i){ return my_measly_int + i; });
my_huge_vector는 람다에서 사용하지 않더라도 복사됩니까?
캡처 목록에 명시 적으로 명명 된 각 변수가 캡처됩니다. 기본 캡처는 (a) 캡처 목록에 명시 적으로 명명되지 않은 변수와 (b) 람다 식 본문에 사용 된 변수 만 캡처합니다 . 변수의 이름이 명시 적으로 지정되지 않고 람다 식에서 변수를 사용하지 않으면 변수가 캡처되지 않습니다. 귀하의 예에서는 my_huge_vector
캡처되지 않습니다.
C ++ 11 §5.1.2 [expr.prim.lambda] / 11에 따라 :
경우 람다 표현이 연관된있다 캡처 기본 및 그 화합물 문 ODR-사용
this
또는 자동 저장 기간과의 변수 ODR 사용되는 개체를 명시 적으로 포착되지 않습니다, 다음 ODR 사용되는 개체는 암시 적으로 캡처 할 수 있다고합니다.
람다 식에는 관련 캡처 기본값이 있습니다. 기본적으로을 사용하여 값으로 변수를 캡처합니다 [=]
.
변수가 사용 된 경우 ( "사용 된"이라는 용어의 하나의 정의 규칙 의미에서) 암시 적으로 캡처 된 변수입니다. my_huge_vector
람다 식의 본문 ( "compound statement")에서 전혀 사용하지 않기 때문에 암시 적으로 캡처되지 않습니다.
§5.1.2 / 14를 계속하려면
엔티티는 다음과 같은 경우 사본으로 캡처됩니다.
- 암시 적으로 캡처되며 캡처 기본값 은
=
또는- 이 포함되지 않은 캡처로 명시 적으로 캡처됩니다
&
.
당신 때문에 my_huge_vector
IS 암시 캡처되지 및 명시 적으로 포착되지 않는, 그것은 사본 또는 참조를 기준으로, 전혀 포착되지 않는다.
아니요, my_huge_vector
캡처되지 않습니다. 사용 된 [=]
모든 변수가 람다에서 캡처 됨을 의미합니다 .
참고 URL : https://stackoverflow.com/questions/6181464/do-c11-lambdas-capture-variables-they-dont-use
'Programming' 카테고리의 다른 글
도커 호스트 OS와 컨테이너 기본 이미지 OS의 관계는 무엇입니까? (0) | 2020.07.17 |
---|---|
: 후 vs. :: 후 (0) | 2020.07.17 |
MSDN 페이지에서 자동 텍스트 번역-끄는 방법? (0) | 2020.07.17 |
짧은 텍스트 문자열을위한 효율적인 압축 알고리즘 (0) | 2020.07.17 |
브라우저에서 웹 소켓 핑 / 퐁 프레임 보내기 (0) | 2020.07.17 |