C ++에서 [=]은 무엇을 의미합니까?


93

나는 무엇을 알고 싶어 [=]? 다음은 간단한 예입니다.

template <typename T>
std::function<T (T)> makeConverter(T factor, T offset) {
    return [=] (T input) -> T { return (offset + input) * factor; };
}

auto milesToKm = makeConverter(1.60936, 0.0);

[]대신 코드가 어떻게 작동 [=]합니까?

나는 가정한다

std::function<T (T)>

(T)인수 및 반환 유형으로 가져 오는 함수 프로토 타입을 의미 T합니까?


4
이것은 세 가지 다른 미 조사 질문을 던지는 것처럼 보이며 C ++ 11에서 람다식이 란 무엇입니까?
underscore_d

@underscore_d에 동의합니다. 일부 클릭이 평점을 높이는 것 같습니다. :)
BitTickler

답변:


108

[=]당신이 언급하고는의 일부 를 캡처 목록 람다 표현. 이것은 람다 식 내부의 코드가 초기화되어 람다가 생성 될 때 사용하는 모든 지역 변수의 복사본을 얻도록 C ++에 알려줍니다. 람다 식을 참조 할 수 있도록이 필요 factor하고 offset함수 내 로컬 변수는 어떤.

당신이를 교체 할 경우 [=][]람다 표현식 내부의 코드는 변수가 무엇인지 알 수 없기 때문에, 당신은 컴파일러 오류가 발생합니다 offsetfactor참조하십시오. 이렇게하면 많은 컴파일러가 좋은 진단 오류 메시지를 제공하므로 시도해보고 어떤 일이 발생하는지 확인하십시오!


13
"필수"-이 정확한 옵션은 필요하지 않습니다. 우리는 또한 다음과 같이 작성할 수 [&], [=offset, =input]등,
MM

1
@MM-현지인에 대한 참조를 캡처하지 않습니까?
쓸모 없음

5
@MM 여기서 참조 캡처를 사용하면 해당 지역 변수의 수명이 람다가 반환되는 즉시 종료되기 때문에 문제가됩니다. 하지만 개별 변수를 개별적으로 나열 할 수 있다는 것은 맞습니다.
templatetypedef

45

그것은이다 람다 캡처 목록입니다. 람다에 변수를 사용할 수 있도록합니다. [=]값으로 또는 [&]참조로 전달 되는 사본을 사용할 수 있습니다 .


3
[]아무것도 캡처하지 않는 것을 사용할 수도 있습니다 . :)
Daniel Kamil Kozar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.