>백엔드 개발 >C++ >`std::function`, `boost::function` 및 `std::tr1::function`이 동등 비교 가능하지 않은 이유는 무엇입니까?

`std::function`, `boost::function` 및 `std::tr1::function`이 동등 비교 가능하지 않은 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-01 19:26:02197검색

Why are `std::function`, `boost::function`, and `std::tr1::function` not Equality Comparable?

std::function이 동등하지 않은 이유

초기 질문:

std::function이 왜 (또한 Boost::function 및 std::tr1::function에 적용 가능) 동등하지 않음?

답변:

비교 이유:

std::function은 다양한 호출 가능 유형을 수용하도록 설계되었습니다. 모든 호출 가능 유형에 동등 비교를 적용하는 것은 구현자에게 부담이 될 수 있습니다. 또한 구현하더라도 동등성 검사는 다르게 구성된 동등한 함수를 고려하지 않아 범위가 좁을 수 있습니다.

"유형 시스템에 가능한 구멍" 설명:

삭제 오버로드된 == 및 != 연산자는 사용을 완전히 금지하므로 암시적으로 함수를 비교하려고 하면 컴파일 시간 오류가 발생합니다. 이 접근 방식은 의도하지 않거나 문제가 있는 암시적 변환의 가능성을 제거합니다.

std::shared_ptr:

std::function과 달리 std::shared_ptr은 다음과 같은 장점이 있습니다. 평등 의미론을 정의했습니다. 두 개의 shared_ptr 인스턴스가 둘 다 비어 있거나 둘 다 비어 있지 않고 동일한 객체를 참조하는 경우 동일한 것으로 간주됩니다.

위 내용은 `std::function`, `boost::function` 및 `std::tr1::function`이 동등 비교 가능하지 않은 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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