> 백엔드 개발 > C++ > 맞춤형 우주선 연산자를 사용하면 C에서 등호 연산자 생성이 방지됩니까?

맞춤형 우주선 연산자를 사용하면 C에서 등호 연산자 생성이 방지됩니까?

DDD
풀어 주다: 2024-11-09 17:56:02
원래의
840명이 탐색했습니다.

Does Using a Custom Spaceship Operator Prevent the Generation of Equality Operators in C  ?

우주선 연산자와 평등 연산자에 대한 영향

C 20에 소개된 우주선 연산자 <=>는 간결한 설명을 제공합니다. 3방향 비교를 위한 구문. 그러나 우주선 연산자와 항등 연산자(== 및 !=)를 모두 사용할 때 예상치 못한 동작이 발생하는 사용자는 놀랄 수 있습니다.

기본 구현 및 생성된 항등 연산자

우주선 연산자가 기본값으로 선언되면(예: 자동 연산자<=>(const X&) const = default;) 컴파일러는 기본 비교를 기반으로 == 연산자를 자동으로 생성합니다. 이는 다음 예에서 설명됩니다.

struct X {
    int Dummy = 0;
    auto operator<=>(const X&amp;) const = default;
};

int main() {
    X a, b;

    a == b; // OK!
}
로그인 후 복사

사용자 정의 구현 및 비생성 동등 연산자

그러나 우주선 연산자의 사용자 정의 구현이 제공되는 경우, 생성된 같음 연산자는 더 이상 사용할 수 없습니다. 이는 사용자 정의 연산자<=> == 연산자를 사용할 때 구현 결과 오류가 발생했습니다.

동작 이면의 추론

이 동작은 의도적인 것입니다. C 표준은 기본 우주선 연산자만 동등 연산자 생성을 트리거하도록 지정합니다([class.compare.default](https://eel.is/cdraft/class.compare.default)). 그 근거는 std::Vector와 같은 특정 클래스가 가장 효율적인 접근 방식이 아닐 수 있으므로 동등성 검사에 우주선 연산자를 사용하는 것을 원하지 않을 수 있다는 것입니다.

결론

따라서 사용자 정의 우주선 연산자를 정의할 때 등호 연산자의 자동 생성이 제거된다는 점을 명심하는 것이 중요합니다. 동등성 검사가 필요한 경우 == 연산자에 대한 명시적인 정의를 제공하는 것이 좋습니다.

위 내용은 맞춤형 우주선 연산자를 사용하면 C에서 등호 연산자 생성이 방지됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿