>백엔드 개발 >C++ >`decltype(auto)`는 C에서 반환 유형 추론 및 템플릿 사용을 어떻게 개선합니까?

`decltype(auto)`는 C에서 반환 유형 추론 및 템플릿 사용을 어떻게 개선합니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-11 18:48:10685검색

How Does `decltype(auto)` Improve Return Type Deduction and Template Usage in C  ?

'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&amp;
auto x5a = f();            // decltype(x5a) is int
decltype(auto) x5d = f();  // decltype(x5d) is int&amp;&amp;

위 내용은 `decltype(auto)`는 C에서 반환 유형 추론 및 템플릿 사용을 어떻게 개선합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.