"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > `std::function`에 동등 비교가 부족한 이유는 무엇입니까?

`std::function`에 동등 비교가 부족한 이유는 무엇입니까?

2024-11-02에 게시됨
검색:339

Why Does `std::function` Lack Equality Comparison?

std::function의 평등 비교 수수께끼 풀기

수수께끼:

std::function이 왜, 동등 비교 기능이 부여되지 않은 최신 C 코드베이스의 필수 구성 요소입니까? 이 질문은 처음부터 프로그래머를 당황하게 하여 호출 가능한 개체 컬렉션을 관리하는 데 혼란과 어려움을 초래했습니다.

초기 모호성:

C 초기 초안 11 표준에서는 연산자== 및 연산자!=에 대한 오버로드가 선언되었지만 삭제되어 적절하게 설명되지 않은 공백이 남습니다. "유형 시스템의 가능한 구멍을 닫습니다"라는 설명은 숨겨진 결함을 암시했지만 그 특성은 여전히 ​​미스터리로 남아 있습니다.

허점과 안전 장치:

The 의심되는 "허점"은 부울 변환 함수의 존재에서 비롯됩니다. 명시적인 동등 비교 연산자가 없는 경우 이 함수는 == 또는 !=를 통해 암시적 비교를 허용할 수 있습니다. 그러나 다음과 같이 이 허점으로 인해 예상치 못한 동작이 발생할 수 있습니다.

struct S {
    operator bool() { return false; }
};

int main() {
    S a, b;
    bool are_equal(a == b); // Uses operator bool on a and b!
}

C 03은 safe-bool 관용구를 도입했고 C 11은 이 허점을 방지하기 위해 명시적인 bool 변환 기능을 구현했습니다.

std::shared_ptr:[와의 대조 &&&]

std::function과 달리 std::shared_ptr은 잘 정의된 동등 의미 체계를 갖습니다. 두 포인터가 모두 비어 있거나 둘 다 비어 있지 않고 동일한 객체를 가리키는 경우 두 포인터는 동일합니다. 이 명확한 정의는 std::shared_ptr에서 동등 비교 연산자의 구현을 허용했습니다.

The Enigma Unraveled:

std::function 동등성을 비교 가능하게 만들지 않은 이유 임의의 호출 가능 유형에 대해 의미 있는 동등 기준을 정의하는 본질적인 과제에서 비롯됩니다. 강제로 적용하면 모든 함수 개체 구현자에게 부담이 되며 바인딩 인수의 차이로 인해 여전히 모호한 비교가 발생할 수 있습니다. 게다가 항등 연산자가 없기 때문에 암시적 변환으로 인해 발생하는 허점이 효과적으로 닫힙니다.

최신 튜토리얼 더>
  • Tailwind CSS: 구성 사용자 정의
    Tailwind CSS: 구성 사용자 정의
    소개 Tailwind CSS는 최근 몇 년 동안 웹 개발자들 사이에서 엄청난 인기를 얻은 인기 있는 오픈 소스 CSS 프레임워크입니다. 아름답고 현대적인 사용자 인터페이스를 만들기 위한 고유한 사용자 정의 가능한 접근 방식을 제공합니다. Tailwind...
    프로그램 작성 2024-11-03에 게시됨
  • jQuery를 사용하여
    jQuery를 사용하여
    jQuery가 무엇인가요? jQuery는 HTML 문서 탐색, 조작, 이벤트 처리 및 애니메이션과 같은 작업을 단순화하도록 설계된 기능이 가득한 빠른 Javascript 라이브러리입니다. "적게 쓰고 더 많이 쓰세요" MDN 상태: jQuery를 사용...
    프로그램 작성 2024-11-03에 게시됨
  • CONCAT()은 완전한 이름 일치를 위해 MySQL 검색 기능을 어떻게 향상시킬 수 있습니까?
    CONCAT()은 완전한 이름 일치를 위해 MySQL 검색 기능을 어떻게 향상시킬 수 있습니까?
    WHERE 절의 MySQL CONCAT() 함수를 사용한 효율적인 검색한 가지 일반적인 데이터베이스 작업은 여러 열에서 데이터를 검색하는 것입니다. 그러나 이름과 성 필드를 별도로 사용하여 이름을 검색할 경우 불완전한 일치 항목을 캡처하는 등의 제한 사항이 있을 수 있...
    프로그램 작성 2024-11-03에 게시됨
  • [일일 패키지] ms
    [일일 패키지] ms
    ms ms는 다양한 시간 형식을 밀리초로 변환하거나 그 반대로 변환합니다. /* time format to milliseconds */ ms('2 days') // 172800000 ms('1d') // 86400000 ms('10h') ...
    프로그램 작성 2024-11-03에 게시됨
  • WordPress 데이터베이스를 로컬에서 프로덕션으로 마이그레이션하는 것을 고려해야 합니다.
    WordPress 데이터베이스를 로컬에서 프로덕션으로 마이그레이션하는 것을 고려해야 합니다.
    로컬 환경에서 프로덕션 서버로 데이터베이스를 마이그레이션하는 것은 부담스러울 수 있지만 올바른 접근 방식을 사용하면 반드시 그럴 필요는 없습니다. 이 가이드에서는 원활한 마이그레이션 프로세스를 보장하기 위해 고려해야 할 주요 사항을 살펴보겠습니다. 데이터...
    프로그램 작성 2024-11-03에 게시됨
  • JavaScript의 중첩 객체 이해
    JavaScript의 중첩 객체 이해
    객체는 JavaScript 개발자로서 작업하는 작업이며, 말할 필요도 없이 TypeScript에도 적용됩니다. TypeScript는 객체 속성에 대한 유형 정의를 정의하는 다양한 방법을 제공합니다. 이 게시물 전체에서 간단한 예부터 시작하여 몇 가지 고급 유형 정의로 ...
    프로그램 작성 2024-11-03에 게시됨
  • 생성자 오버로드
    생성자 오버로드
    생성자도 메서드처럼 오버로드될 수 있습니다. 생성자 오버로드를 사용하면 다양한 방법으로 객체를 생성할 수 있습니다. MyClass 클래스에는 4개의 오버로드된 생성자가 있으며 각각은 객체를 다르게 초기화합니다. 새 문에 제공된 매개변수를 기반으로 적절한 생성자가 호출...
    프로그램 작성 2024-11-02에 게시됨
  • Node.js로 JavaScript의 힘을 발휘해보세요!
    Node.js로 JavaScript의 힘을 발휘해보세요!
    JavaScript는 더 이상 브라우저만을 위한 것이 아닙니다. Node.js 덕분에 서버 측도 대신하게 되었습니다. ? 노련한 개발자이든 이제 막 시작하는 개발자이든 Node.js를 마스터하는 것은 판도를 바꾸는 일입니다. Node.js를 시작해야 하는 이유는 다음과...
    프로그램 작성 2024-11-02에 게시됨
  • INMET-BDMEP 기후 데이터 수집 및 처리
    INMET-BDMEP 기후 데이터 수집 및 처리
    Os dados climáticos desempenham um papel crucial em diversos setores, auxiliando em estudos e previsões que impactam áreas como agricultura, planejame...
    프로그램 작성 2024-11-02에 게시됨
  • LLP 등록: 주요 이점 및 법적 요구 사항
    LLP 등록: 주요 이점 및 법적 요구 사항
    귀하의 비즈니스를 유한 책임 파트너십(LLP)으로 등록하는 것은 유연성, 법적 보호 및 단순화된 규정 준수의 고유한 조합으로 인해 기업가와 전문가 사이에서 점점 더 인기 있는 선택이 되고 있습니다. LLP 등록은 뚜렷한 이점을 제공하며 간소화되고 효율적인 비즈니스 구...
    프로그램 작성 2024-11-02에 게시됨
  • HLHealth 레벨 7)
    HLHealth 레벨 7)
    HL7은 Health Level 7이라고도 알려져 있으며 다양한 의료 시스템에서 전자 정보를 통합, 교환, 관리 및 검색하는 데 사용되는 메시징 및 임상 표준 표준입니다. 환자의 병원 입원과 같은 이벤트에 의해 촉발되는 트랜잭션을 기반으로 하는 프로토콜입니다. HL7은...
    프로그램 작성 2024-11-02에 게시됨
  • 별도의 스레드에서 Qt MainWindow를 안전하게 업데이트하는 방법은 무엇입니까?
    별도의 스레드에서 Qt MainWindow를 안전하게 업데이트하는 방법은 무엇입니까?
    Qt - 두 번째 스레드로 기본 창 업데이트멀티 스레드 Qt 애플리케이션에서 별도의 스레드에서 기본 UI(mainwindow.ui) 업데이트 도전을 제기할 수 있습니다. 이 문서에서는 사용자 정의 스레드 내에서 UI 요소(예: 주어진 코드의 ana->ui->horizo...
    프로그램 작성 2024-11-02에 게시됨
  • NgRx를 사용하여 각도 상태 관리 마스터하기
    NgRx를 사용하여 각도 상태 관리 마스터하기
    State management in Angular ensures that data is consistently and efficiently shared across all parts of an application. Instead of each component man...
    프로그램 작성 2024-11-02에 게시됨
  • Hexabot 설정 및 비주얼 편집기 튜토리얼: 첫 번째 AI Chatbot 구축
    Hexabot 설정 및 비주얼 편집기 튜토리얼: 첫 번째 AI Chatbot 구축
    챗봇 매니아 여러분, 안녕하세요! 이 튜토리얼에서는 오픈 소스 AI 챗봇 빌더인 Hexabot을 설정하고 사용하는 과정을 안내합니다. 먼저 GitHub 저장소 복제, 종속성 설치, Hexabot용 환경 변수 구성부터 시작하겠습니다. 또한 Docker를 사용하여 프로젝트...
    프로그램 작성 2024-11-02에 게시됨
  • mysql_fetch_row(), mysql_fetch_assoc() 및 mysql_fetch_array(): 어느 것을 선택해야 합니까?
    mysql_fetch_row(), mysql_fetch_assoc() 및 mysql_fetch_array(): 어느 것을 선택해야 합니까?
    mysql_fetch_row(), mysql_fetch_assoc() 및 mysql_fetch_array() 설명됨배경:사용되지 않는 MySQL 확장을 사용하면 결과 집합에서 데이터를 검색하기 위해 mysql_fetch_row(), mysql_fetch_assoc() ...
    프로그램 작성 2024-11-02에 게시됨

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3