왜 std::function은 동등 비교가 불가능한가요?
광범위한 사용에도 불구하고 std::function은 동등 비교가 아닙니다. Boost::function 및 std::tr1::function에도 적용되는 이 제한은 언어 설계 고려 사항에 뿌리를 두고 있습니다.
원래 삭제된 연산자
초기 C 11 초안에서는 std::function에 대한 항등 연산자가 삭제된 것으로 선언되었으며 "삭제된 오버로드는 유형 시스템의 가능한 구멍을 닫습니다."라는 설명과 함께 삭제되었습니다. 이 모호한 진술은 이 "구멍"의 본질에 대해 궁금하게 만듭니다.
부울 유사 변환 "허점"
TR1 사양에 따르면 선언되지 않은 평등은 std::function의 연산자는 불리언형 변환으로 생성된 허점을 막는 것을 목표로 합니다. 이러한 변환을 사용하면 == 및 !=를 통해 함수 인스턴스를 비교할 수 있습니다.
std::shared_ptr 예외
std::function과 달리 std::shared_ptr에는 잘 정의된 평등 의미론. 두 포인터가 모두 비어 있거나 둘 다 비어 있지 않고 동일한 개체를 가리키는 경우 동일한 것으로 간주됩니다. 이는 std::shared_ptr의 역할이 더 간단하고 동등 의미를 쉽게 정의할 수 있기 때문입니다.
복잡성과 동등성
std::function에 대한 동등 비교를 구현하면 모든 호출 가능한 유형이 동등 비교 가능해야 하지만 항상 가능한 것은 아닙니다. 또한 함수의 동등성을 테스트하는 것은 어려울 수 있으며, 특히 서로 다른 인수 바인딩이 있는 경우 더욱 그렇습니다.
결론
std::function은 다양한 함수를 사용하는 편리한 방법을 제공합니다. 호출 가능 유형의 동등성 비교 가능성이 부족한 것은 의도적인 디자인 선택이었습니다. 잠재적인 허점을 피하고 호출 가능 유형의 다양한 특성을 수용하는 것이 이 결정의 주요 고려 사항이었습니다.
위 내용은 std::function이 동등하지 않은 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!