initializer_list를 사용한 템플릿 유형 추론
다음 함수를 고려하세요.
template<typename T> void printme(T&& t) { for (auto i : t) std::cout << i; }
위 함수에는 단일 매개변수가 필요합니다 Begin() 및 end() 멤버 함수를 사용합니다. 다양한 데이터 유형으로 이 함수를 호출하는 방법에는 여러 가지가 있습니다. 예를 들어 std::벡터, std::string, std::array 또는 초기화 목록을 사용할 수 있습니다. 그러나 불법인 특별한 경우가 하나 있습니다.
printme({'a', 'b', 'c'});
이 코드 줄은 컴파일 시간 오류를 발생시킵니다. 왜 그럴까요?
템플릿 인수 추론 실패
템플릿 인수에 대한 유형 추론은 함수 매개변수 유형이 제공된 인수 유형과 일치하는 경우에만 성공할 수 있습니다. printme 함수의 경우:
결과적으로 컴파일러는 초기화 목록 인수의 경우 템플릿 인수 T를 추론할 수 없습니다. 템플릿 인수를 명시적으로 지정하면 문제가 해결됩니다(예: printme
auto의 특수 사례
printme 함수에서는 초기화 목록 인수가 불법이지만 다음을 수행하려면 auto를 사용하는 것이 유효합니다. 초기화 목록을 보유하는 변수를 초기화합니다. 이는 auto가 il 유형을 std::initializer_list
위 내용은 이 예에서 'initializer_list'를 사용하면 템플릿 유형 추론이 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!