오버로드 해결: Value, Rvalue 참조 및 Const Lvalue 참조
오버로드 해결에서는 여러 호출이 있을 때 모호한 호출이 발생하는 것이 일반적입니다. 실행 가능한 함수는 동일한 매개변수 유형을 공유합니다. 값, rvalue 참조 및 const lvalue 참조 사이에 오버로드가 발생할 때 특히 흥미로운 경우가 발생합니다.
모호성과 해결 방법
주어진 함수:
int f( int ); int f( int && ); int f( int const & );
호출 int q = f( 3 ); 모호해진다. Clang과 GCC는 f( int )가 제거될 때 lvalue 참조보다 rvalue 참조를 선호합니다. 그러나 참조 오버로드 중 하나를 제거하면 f( int )의 모호성이 발생합니다.
오버로드 해결 규칙
오버로드 해결은 참조 오버로드에 대한 고유한 "더 나은 일치"를 찾는 것을 기반으로 합니다. 매개변수. 특별한 규칙이 없으면 세 가지 초기화(value, rvalue 참조 및 const lvalue 참조)는 모두 구별되지 않습니다.
그러나 rvalue 참조는 rvalue에 바인딩되고 const lvalue 참조는 그렇지 않기 때문에 rvalue 참조는 13.3.3.2의 다음 규칙으로 인해 더 나은 일치로 간주됩니다.
S1 binds an rvalue reference to an rvalue and S2 binds an lvalue reference.
이 규칙은 적용되지 않습니다. 하나의 초기화가 참조 바인딩이 아닌 경우.
향후 표준을 위한 제안
저자는 미래 표준에서는 int보다 int &&를 선호해야 한다고 제안합니다. 제한되지 않은 객체 유형과 달리 이니셜라이저에 대한 초기화 바인딩입니다. 이는 이동에 따른 오버헤드를 피하면서 순수 값별 전달의 대안이 될 수 있습니다.
위 내용은 C 오버로드 확인은 값, Rvalue 참조 및 Const Lvalue 참조 매개 변수를 어떻게 처리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!