C 14에서는 강력한 람다 표현식을 도입하여 일부 사람들이 std::bind의 지속적인 관련성에 의문을 제기하게 했습니다. 람다는 간결한 구문을 제공하는 반면 std::bind는 특정 용도로 유틸리티를 유지합니다. 시나리오.
이동할 수 없는 캡처된 변수:
C 11에서 람다는 lvalue 변수만 캡처할 수 있는 반면, 바인드는 변수 이동을 허용합니다. 바인드를 통해 다음 코드를 작성할 수 있습니다.
auto f1 = std::bind(f, 42, _1, std::move(v));
표현 캡처:
lambda는 표현식을 직접 캡처할 수 없습니다. 대신에 바인딩을 사용하면 다음과 같이 작성할 수 있습니다.
auto f1 = std::bind(f, 42, _1, a + b);
함수 객체 오버로딩 매개변수:
C 14에서 람다는 유형 추론을 통해 이 문제를 해결하고 여기에 바인딩할 수 있습니다. 현장에서.
매개변수를 전달할 수 없습니다:
이상적으로 완벽한 전달을 사용해야 하는 바인딩은 다음 코드와 같이 작성할 수 있습니다.
auto f1 = [=](auto&& arg) { f(42, std::forward<decltype(arg)>(arg)); };
그러나 대신, 바인드는 이를 다음 형식으로 차단합니다.
auto f1 = std::bind(std::declval<decltype(f)>(), 42, _1); auto f2 = std::bind(f, 42, std::declval<decltype(arg)>(), std::placeholders::_2);
바인드의 단점:
이에도 불구하고, 바인드에는 여전히 장점이 있습니다. 함수 객체 유형만 생성하는 반면, 람다는 각 함수에 대해 고유한 유형을 생성할 수 있습니다. 궁극적으로 바인드 또는 람다 선택은 특정 사용 사례와 장단점에 따라 달라집니다.
위 내용은 C 14에서 람다보다 `std::bind`를 선호해야 하는 경우는 언제입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!