변환 순서 모호성: 변환 생성자 대 연산자의 우선순위
A 클래스 객체에서 B 클래스 객체를 초기화할 때 모호성 변환 생성자와 변환 연산자가 모두 정의된 경우 발생할 수 있습니다. 이러한 함수 간의 상호 작용에 따라 호출될 함수가 결정됩니다.
우선순위 설정
C 표준(8.5/14)에 따르면 사용자 정의 변환 시퀀스는 A에서 B로 변환할 수 있는 항목을 열거하고, 과부하 해결을 통해 가장 좋은 것을 선택합니다. 변환 연산자는 변환 생성자를 적용할 수 없는 경우에만 고려됩니다.
매개변수 변환
오버로드 해결은 변환 함수와 생성자를 호출 인수와 일치하는 매개변수 목록으로 변환합니다. . 변환 연산자의 경우 암시적 개체 매개변수가 생성되어 연산자의 함수 매개변수와 소스 개체 간의 바인딩이 생성됩니다.
Winning Candidate
변환 연산자 승리 "최소 const 자격" 규칙(13.3.3.2/3)으로 인해. 이 경우 생성자 B(const A&)에는 매개변수로 const 참조가 있는 반면, 변환 연산자 연산자 B()에는 const가 아닌 참조가 있습니다. 소스 객체가 rvalue(임시)이므로 const가 아닌 참조가 여기에 바인딩될 수 있습니다.
객체 지향 관점
객체 지향 관점에서 보면, B의 생성자보다 A의 변환 연산자를 기본적으로 선택하면 변환 절차를 정의하는 책임이 소스 클래스(A)에 있음을 알 수 있습니다. 그러나 대상 클래스인 B가 이 변환에 대한 일차적 책임을 져야 하는지 여부는 여전히 논쟁의 여지가 있습니다.
위 내용은 변환 순서 모호성: 변환 연산자가 생성자를 능가하는 경우는 언제입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!