> 백엔드 개발 > C++ > C 14에서 람다보다 `std::bind`를 선호해야 하는 경우는 언제입니까?

C 14에서 람다보다 `std::bind`를 선호해야 하는 경우는 언제입니까?

Barbara Streisand
풀어 주다: 2024-12-23 09:09:34
원래의
398명이 탐색했습니다.

When Should You Prefer `std::bind` Over Lambdas in C  14?

C 14에서 람다보다 std::bind를 고려해야 하는 이유는 무엇입니까?

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&amp;&amp; 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿