>백엔드 개발 >C++ >std::function이 동등하지 않은 이유는 무엇입니까?

std::function이 동등하지 않은 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-01 13:13:02695검색

Why is std::function Not Equality Comparable?

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.