- 오버로딩 분석(overload resoultion)
오버로딩, 함수템플릿, 함수템플릿 오버로딩 등 같은 이름의 함수가 여러개 있다면
컴파일러는 어떤 함수의 정의를 사용할것인가에 대해 C++는 선택과정을 가지고 있는데
이를 오버로딩 분석 이라 한다
오버로딩 분석은 함수 시그니쳐로만 판단을 하며 리턴형은 분석 대상이 아니다
각 단계는
1단계 : 호출된 함수의 이름과 동일한 함수들을 모아 목록을 만든다
2단계 : 매개변수의 개수와, 각 매개변수의 자료형이 맞는 함수만 뽑아낸다
여기서 자료형이 일치하지 않더라도 암시적 변환이 이루어지고 템플릿의 경우 구체화가 이루어 진다
3단계 : 가장 적당한 함수가 있는지 판단한다. 그 순서다
만약 정확하게 대응하는 함수가 두개 이상이거나 없으면 에러가 난다
일단 아직은 자세히 들어갈 필요보단 C++에서 여러 함수에 대응될때 매개변수를 통해 하나의 최적의 결과를
얻는다 생각 하면 될듯하다
- decltype
decltype는 특정 식의 자료형을 추론할때 사용된다.
밑의 코드처럼 result에는 어떤 자료형이 들어와야 하는지 알 수 없다
+ 연산자는 기본으로 정수형 승급을 적용하여 결과는 정수형 타입이 되지만
따로 오버로딩도 가능하기에 어떤 타입이 될지 알수 없다
그에 따른 C++11의 해결책은 decltype 키워드 이다
이렇게 a+b의 자료형을 추론하여 자료형을 선언한다
- 후위반환타입
C++11 에 생긴 Trailing Return Type(리턴 타입 추적 or 후위 반환 타입) 이라는 문법인데
말그대로 리턴타입을 추론해 내는 문법이다
사용법은 함수의 반환형을 auto로 사용하고 매개변수 괄호를 지나 -> 자료형 을 기술하면 된다
이런식으로 사용 된다.
double을 작성함으로 리턴타입추적의 결과를 double로 찾게된다
이 경우에는 decltype을 통해 리턴 자료형을 추론하였다고 볼수있다
밑의 코드처럼 꼭 템플릿이 아니라 일반 함수에도 사용 가능하다
[하지만 템플릿을 위해 만들어진 기능인듯하당]
기능은 auto와 매우 흡사하고 같이 연역관련 개념은 좀 깊이가 깊은듯 하여 따로 자세히 포스팅을 해야겠다
'C++ > [책] C++ 기초 플러스' 카테고리의 다른 글
[ 590p ~ 595p ] thread_local, volatile, mutable, const의 내부링크, 함수와 링크, 단일 정의 규칙 (0) | 2021.08.18 |
---|---|
[ 559p ~ 589p ] 분할컴파일, #ifndef & #endif, Linkage, extern, static, 정적&전역&정적지역 변수 (0) | 2021.08.16 |
[ 517p ~ 534p ] 함수 템플릿, 템플릿 오버로딩, 구체화, 명시적 특수화 (0) | 2021.08.11 |
[ 486p ~ 517p ] 배열참조형, 디폴트 매개변수, 오버로딩, Name mangling (0) | 2021.07.29 |
[ 467p ~ 485p ] inline, 참조변수 (0) | 2021.07.18 |