우주선 연산자와 평등 연산자에 대한 영향
C 20에 소개된 우주선 연산자 <=>는 간결한 설명을 제공합니다. 3방향 비교를 위한 구문. 그러나 우주선 연산자와 항등 연산자(== 및 !=)를 모두 사용할 때 예상치 못한 동작이 발생하는 사용자는 놀랄 수 있습니다.
기본 구현 및 생성된 항등 연산자
우주선 연산자가 기본값으로 선언되면(예: 자동 연산자<=>(const X&) const = default;) 컴파일러는 기본 비교를 기반으로 == 연산자를 자동으로 생성합니다. 이는 다음 예에서 설명됩니다.
struct X { int Dummy = 0; auto operator<=>(const X&) 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!