수수께끼:
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 동등성을 비교 가능하게 만들지 않은 이유 임의의 호출 가능 유형에 대해 의미 있는 동등 기준을 정의하는 본질적인 과제에서 비롯됩니다. 강제로 적용하면 모든 함수 개체 구현자에게 부담이 되며 바인딩 인수의 차이로 인해 여전히 모호한 비교가 발생할 수 있습니다. 게다가 항등 연산자가 없기 때문에 암시적 변환으로 인해 발생하는 허점이 효과적으로 닫힙니다.부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3