> 백엔드 개발 > C++ > 변환 순서 모호성: 변환 연산자가 생성자를 능가하는 경우는 언제입니까?

변환 순서 모호성: 변환 연산자가 생성자를 능가하는 경우는 언제입니까?

DDD
풀어 주다: 2024-11-12 06:17:02
원래의
969명이 탐색했습니다.

Conversion Sequence Ambiguity: When Does a Conversion Operator Trump a Constructor?

변환 순서 모호성: 변환 생성자 대 연산자의 우선순위

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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