> 백엔드 개발 > C++ > 사용자 정의 유형에 대한 암시적 유형 변환 시 템플릿 추론이 실패하는 이유는 무엇입니까?

사용자 정의 유형에 대한 암시적 유형 변환 시 템플릿 추론이 실패하는 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2024-10-28 14:28:30
원래의
1088명이 탐색했습니다.

Why Does Template Deduction Fail with Implicit Type Conversion for User-Defined Types?

암시적 유형 변환 및 템플릿 추론

암시적으로 int를 Scalar 템플릿 함수 호출 내에서 개체를 사용하면 템플릿 인수 추론이 실패할 수 있습니다. 이는 템플릿 인수 추론이 int와 Scalar 사이의 변환과 같은 사용자 정의 변환을 자동으로 고려하지 않기 때문에 발생합니다.

제공된 코드에서:

<code class="cpp">func(a, 2);</code>
로그인 후 복사

컴파일러는 int 2를 Scalar로 암시적으로 변환하려고 시도합니다. 개체이지만 사용자 정의 변환을 고려하지 않기 때문에 템플릿 인수 추론이 실패합니다. 이 문제를 해결하려면 호출자 사이트에서 인수를 명시적으로 변환해야 합니다.

<code class="cpp">func(a, Scalar<int>{2}); // C++14</code>
로그인 후 복사

또는 C 17을 사용하는 경우 Scalar에 대해 추론 가이드를 정의하여 다음 구문을 허용할 수 있습니다.

<code class="cpp">func(a, Scalar{2});</code>
로그인 후 복사

마지막으로 지정된 유형 인수를 사용하여 템플릿 함수를 명시적으로 인스턴스화하면 암시적 변환의 필요성을 우회할 수도 있습니다.

<code class="cpp">func<int>(a, 2); // Assuming Scalar<T>::Scalar(T) is not explicit</code>
로그인 후 복사

위 내용은 사용자 정의 유형에 대한 암시적 유형 변환 시 템플릿 추론이 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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