• 오버로딩 분석(overload resoultion)

오버로딩, 함수템플릿, 함수템플릿 오버로딩 등 같은 이름의 함수가 여러개 있다면

컴파일러는 어떤 함수의 정의를 사용할것인가에 대해 C++는 선택과정을 가지고 있는데

이를 오버로딩 분석 이라 한다

 

오버로딩 분석은 함수 시그니쳐로만 판단을 하며 리턴형은 분석 대상이 아니다

 

 

각 단계는

 

1단계 : 호출된 함수의 이름과 동일한 함수들을 모아 목록을 만든다

 

2단계 : 매개변수의 개수와, 각 매개변수의 자료형이 맞는 함수만 뽑아낸다

여기서 자료형이 일치하지 않더라도 암시적 변환이 이루어지고 템플릿의 경우 구체화가 이루어 진다

 

3단계 : 가장 적당한 함수가 있는지 판단한다. 그 순서다

만약 정확하게 대응하는 함수가 두개 이상이거나 없으면 에러가 난다

 

일단 아직은 자세히 들어갈 필요보단 C++에서  여러 함수에 대응될때 매개변수를 통해 하나의 최적의 결과를

얻는다 생각 하면 될듯하다

 


  • decltype

decltype는 특정 식의 자료형을 추론할때 사용된다.

 

밑의 코드처럼 result에는 어떤 자료형이 들어와야 하는지 알 수 없다

+ 연산자는 기본으로 정수형 승급을 적용하여 결과는 정수형 타입이 되지만

따로 오버로딩도 가능하기에 어떤 타입이 될지 알수 없다

 

그에 따른 C++11의 해결책은 decltype 키워드 이다

이렇게 a+b의 자료형을 추론하여 자료형을 선언한다

 


  • 후위반환타입

C++11 에 생긴 Trailing Return Type(리턴 타입 추적 or 후위 반환 타입) 이라는 문법인데

말그대로 리턴타입을 추론해 내는 문법이다

 

사용법은 함수의 반환형을 auto로 사용하고 매개변수 괄호를 지나 -> 자료형 을 기술하면 된다

이런식으로 사용 된다.

 

double을 작성함으로 리턴타입추적의 결과를 double로 찾게된다

 

리턴자료형은 a+b

이 경우에는 decltype을 통해 리턴 자료형을 추론하였다고 볼수있다

 

밑의 코드처럼 꼭 템플릿이 아니라 일반 함수에도 사용 가능하다

[하지만 템플릿을 위해 만들어진 기능인듯하당]

 


기능은 auto와 매우 흡사하고 같이 연역관련 개념은 좀 깊이가 깊은듯 하여 따로 자세히 포스팅을 해야겠다

+ Recent posts