질문:
함수가 유형의 매개변수를 사용하는 이유는 무엇입니까? const char*는 const char (&s)[N] 유형의 매개변수가 있는 함수 템플릿보다 우선합니다. 동일하게 적용 가능합니까?
근본 원인:
모호함은 전환의 상대적 비용에서 비롯됩니다. 과부하 해결은 변환 작업이 덜 필요한 기능을 선호합니다. 배열은 사실상 첫 번째 요소에 대한 포인터입니다. 이는 배열 기반 함수 템플릿을 선언하는 것보다 배열에서 포인터로의 변환 비용이 저렴하다는 것을 의미합니다.
표준 설명:
C 표준에 따르면 ([over.match.best]/(1.3), (1.6)):
이 경우:
가능 해결 방법:
템플릿 기반 함수의 우선 순위를 지정하려면 두 번째 오버로드도 함수 템플릿으로 정의합니다.
template <typename T> auto foo(T s) -> std::enable_if_t<std::is_convertible<T, char const*>{}> { std::cout << "raw, size=" << std::strlen(s) << std::endl; }
이 부분 순서 지정을 통해 템플릿 기반 함수는 해당되는 경우 선택하세요.
위 내용은 `const char*` 함수 오버로드가 `const char (&)[N]` 템플릿 함수보다 우선하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!