우주선 연산자와 등식 비교
C 20 우주선 연산자(<=>라고도 함)는 편리하고 간결한 구문을 도입합니다. 값을 비교하기 위해. 그러나 특정 시나리오에서는 예상되는 같음 및 같지 않음 연산자(== 및 !=)가 생성되지 않을 수 있습니다. 이 질문은 이 동작과 사용자 정의 우주선 연산자 구현이 이러한 추가 연산자의 생성을 방지할 수 있는 이유를 탐구합니다.
문제 설명
우주선 연산자가 있는 다음 코드 조각을 고려하세요. 기본 구현이 있는 구조체에서 사용됩니다.
이 코드는 오류 없이 컴파일됩니다. 그러나 사용자 정의 우주선 연산자 구현을 정의하는 경우:
항등 연산자(==)를 사용하려고 하면 컴파일러에서 오류가 발생합니다.
설명
이 동작은 언어 표준에 정의된 대로 의도적인 것입니다. 클래스에 기본 우주선 연산자가 있는 경우 컴파일러는 같음 연산자의 기본 구현을 합성합니다. 그러나 우주선 연산자가 사용자 정의 정의로 구현되면 컴파일러는 항등 연산자를 자동으로 생성하지 않습니다.
이러한 구별은 효율성에 대한 우려에서 비롯됩니다. 우주선 연산자는 값의 완전한 순서를 제공하도록 설계된 반면, 같음 연산자(==)는 전체 비교를 시도하기 전에 크기를 비교하는 등의 최적화를 수행할 수 있습니다. std::Vector와 같은 클래스의 경우 동등 비교를 위해 우주선 연산자를 사용하는 것이 가장 효율적인 접근 방식이 아닐 수 있습니다.
상등 연산자 구현을 프로그래머에게 맡기면 컴파일러는 비 연산자 생성 가능성을 방지합니다. -최적의 구현. 따라서 클래스에 기본값이 아닌 우주선 연산자가 있는 경우 개발자는 동등 연산자도 명시적으로 정의해야 합니다.
위 내용은 C 20의 맞춤형 우주선 연산자가 자동 동등 비교를 방지하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!