C 11에서 std::make_pair는 rvalue에 대한 참조인 두 개의 인수를 사용합니다( T&& 및 U&&). 그러나 호출 중에 템플릿 매개 변수를 명시적으로 지정하면 인수 추론이 방지되어 함수 템플릿 선언 내에서 rvalue 참조가 대체됩니다. lvalue 인수가 rvalue 참조에 바인딩될 수 없는 이러한 불일치로 인해 컴파일 오류가 발생합니다.
명시적으로 제공된 템플릿 인수(예: std)와 함께 std::make_pair를 사용하려고 시도 ::make_pair
템플릿의 Rvalue 참조 매개변수는 템플릿 유형 매개변수의 모든 인스턴스에 바인딩할 수 있는 고유한 기능을 보유합니다. lvalue, rvalue 또는 정규화된 값.
std::make_pair 호출 중에 템플릿 인수가 생략되고 템플릿 인수 공제가 발생합니다. 컴파일러는 제공된 인수(이 경우 std::string 및 int)에서 템플릿 유형을 추론합니다. rvalue 참조 매개변수(T&& 및 U&&)는 각각 std::string& 및 int&&로 추론됩니다. T에 대한 결과 템플릿 인수가 축소되어 추가 참조가 제거되고 lvalue 인수(std::string)에 대한 바인딩이 허용됩니다.
이러한 오류를 방지하려면 필요한 경우가 아니면 std::make_pair에 대한 템플릿 인수를 명시적으로 지정합니다. 컴파일러가 일반적으로 원하는 동작으로 이어지는 인수 추론을 수행하도록 허용합니다. 예상치 못한 결과가 발생하는 경우 명확한 컴파일 오류가 문제를 정확히 파악하는 데 도움이 됩니다.
위 내용은 `std::make_pair`에 템플릿 매개변수를 명시적으로 지정하면 C 11에서 컴파일 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!