함수 제목의 화살표 연산자 (->)
그런 코드를 찾았습니다.
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);
컴파일러는 무엇을 알고하지 않는다는 것을 당신에게 말할 것이다 a
및 b
에 decltype
인수. 인수 목록에 의해서만 선언되기 때문입니다.
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
'Programming' 카테고리의 다른 글
java.sql.SQLException :-ORA-01000 : 최대 열린 커서가 초과되었습니다 (0) | 2020.08.06 |
---|---|
손가락, 안드로이드로 캔버스에 그리기 (0) | 2020.08.06 |
openssl verify를 사용하여 인증서 체인 확인 (0) | 2020.08.05 |
C #에서 Select와 ConvertAll의 차이점 (0) | 2020.08.05 |
Firefox에서 개발 된 Javascript가 IE에서 실패하는 일반적인 이유는 무엇입니까? (0) | 2020.08.05 |