'decltype(auto)' 언어 기능 사용
C 14에서 도입된 'decltype(auto)' 관용구는 ' auto' 선언을 사용하여 지정된 표현식에서 주로 함수의 반환 유형 추론을 위해 'decltype' 규칙을 활용합니다. 그러나 그 유용성은 이 시나리오 이상으로 확장됩니다.
일반 코드의 반환 유형 전달
비일반 코드의 경우 반환 유형을 참조로 명시적으로 선택할 수 있습니다. 그러나 일반 코드에서는 'decltype(auto)'를 사용하면 반환 유형이 참조인지 값인지에 관계없이 정확한 반환 유형 전달이 가능합니다.
template<class Fun, class... Args> decltype(auto) Example(Fun fun, Args&&... args) { return fun(std::forward<Args>(args)...); }
재귀 템플릿에서 반환 유형 추론 지연
재귀 템플릿 정의 시 'decltype(auto)'는 템플릿 이후까지 반환 유형 추론을 연기할 수 있습니다. 인스턴스화.
template<int i> struct Int {}; constexpr auto iter(Int<0>) -> Int<0>; template<int i> constexpr auto iter(Int<i>) -> decltype(auto) { return iter(Int<i-1>{}); } int main() { decltype(iter(Int<10>{})) a; }
추가 애플리케이션
표준 N3936 초안에 따르면 'decltype(auto)'는 함수 선언자, 유형 지정자를 비롯한 다양한 컨텍스트에 나타날 수 있습니다. , 변수 초기화. 이러한 컨텍스트는 반환 유형 추론, 유형 자리 표시자 지정, 안전한 값 할당과 같은 작업에 대한 유틸리티를 제공합니다.
int i; int&& f(); auto x3a = i; // decltype(x3a) is int decltype(auto) x3d = i; // decltype(x3d) is int auto x4a = (i); // decltype(x4a) is int decltype(auto) x4d = (i); // decltype(x4d) is int& auto x5a = f(); // decltype(x5a) is int decltype(auto) x5d = f(); // decltype(x5d) is int&&
위 내용은 `decltype(auto)`는 C에서 반환 유형 추론 및 템플릿 사용을 어떻게 개선합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!