Programming

함수 제목의 화살표 연산자 (->)

procodes 2020. 8. 5. 21:43
반응형

함수 제목의 화살표 연산자 (->)


그런 코드를 찾았습니다.

template <typename T, typename T1> auto compose(T a, T1 b) -> decltype(a + b) {
   return a+b;
}

나는 모든 것을 세밀하게 생각했다. 화살표 연산자 ( ->)가 함수 머리글에서 무엇을 의미합니까? 나는 논리적으로 논리적으로 그 ->연산자가 유형을 결정하는데,이 유형 auto은을 (를) 얻을 수 있지만 이것을 직접 얻고 싶지만 정보를 찾을 수 없습니다.


C ++ 11에는 함수 선언에 대한 두 가지 구문이 있습니다.

    반환 형식 식별자 ( 인수 선언 ... )

    auto 식별자 ( 인수 선언 ... ) -> return_type

그것들은 동등합니다. 이제 그것들이 동등 할 때, 왜 후자를 사용하고 싶습니까? 음, C ++ 11 decltype은 표현식의 타입을 설명 할 수있는 이 멋진 것을 소개했습니다 . 따라서 인수 유형에서 리턴 유형을 파생시킬 수 있습니다. 그래서 당신은 시도 :

template <typename T1, typename T2>
decltype(a + b) compose(T1 a, T2 b);

컴파일러는 무엇을 알고하지 않는다는 것을 당신에게 말할 것이다 abdecltype인수. 인수 목록에 의해서만 선언되기 때문입니다.

declval이미 선언 된 템플릿 매개 변수와을 사용하여 문제를 쉽게 해결할 수 있습니다 . 처럼:

template <typename T1, typename T2>
decltype(std::declval<T1>() + std::declval<T2>())
compose(T1 a, T2 b);

지금은 정말 장황 해지고 있습니다. 대체 선언 구문이 제안 및 구현되었으므로 이제

template <typename T1, typename T2>
auto compose(T1 a, T2 b) -> decltype(a + b);

덜 장황하고 범위 지정 규칙을 변경할 필요가 없었습니다.


C ++ 14 업데이트 : C ++ 14는 또한

    auto 식별자 ( 인수 선언 ... )

함수가 사용 전에 완전히 정의되고 모든 return명령문이 동일한 유형으로 추론되는 한. ->소스 파일에 몸을 숨기려면 구문 (헤더에 선언 된) 공공 기능에 대한 유용한 남아있다. 분명히 그것은 템플릿으로는 할 수 없지만, 달리 작성하기 어려운 구체적인 유형 (일반적으로 템플릿 메타 프로그래밍을 통해 파생 됨)이 있습니다.


일반 영어에서는 반환 유형이 a의 합의 유추 된 유형임을 알려줍니다 b.

참고 URL : https://stackoverflow.com/questions/22514855/arrow-operator-in-function-heading

반응형