후위 반환 타입

보물창고·2022년 8월 11일
0

c++ basic 코드누리

목록 보기
14/50
post-custom-banner

problem

: 아래의 코드를 복붙하고, 후위반환 타입으로 처리하는 코드를 작성하라.

template<typename T1, typename T2>
? ? func(T1 a, T2 b)
{
	return a + b;
}


int main()
{
	
	

}

개념

: 반환 타입을 컴파일 시간에 결정하는 기법.

  • 언제 사용할까?
    : 이러한 경우가 있음.
    -> T1의 타입과 T2의 타입이 결정되지 않음...

결론
-> 반환 타입을 결정하기 어려울 때, 후위 반환 타입을 통해 처리할 수 있음.
템플릿 인자가 한개 들어온다면 , 해당 템플릿 인자 타입을 반환하면 되지만,
이와 같은 상황은 어떻게 해야할지...??
: 이때 사용되는 것이 suffix return? type임.

어디에 사용할까?

  1. 람다 표현식
  2. 함수 템플릿

사용법

auto 함수명(T 인자명) -> 반환 타입
{ }
: 이런식으로 사용함.

problem

: 이전 시간에 배운, auto 와 decltype을 이용해서
만들어보아라.

가) decltype을 이용해서 만들어봐라. : 잘못된 표현
: 이전 시간에 decltype의 괄호 안에다가 변수를 넣으면,
컴파일 시간에 컴파일러가 알아서 해당 타입으로 변환을 한다고 배웠음!

  • 결과
    : 왜 이런 현상이??
    생각을 해보면, 인자를 통해서 a,b의 인자타입이 결정되는데,
    인자 타입이 결정되기도 전에 앞서서, a와 b를 decltype() 스코프에서 사용하고
    있으므로 당연히 문제임

나) auto 를 이용해서 만들어보아라. : c++14부터 가능한 방법임
: 올바른 표현 이지만, 특징으로 인한 의도치 않은 문제가 있다.
auto는 참조성을 제거한다...

다) auto와 decltype을 합쳐서 만들어보아라.
: 올바른 표현

나)와 다) 간의 차이가 있음.

  • 나)의 경우에는 반환값이 auto 이기 때문에 참조성이 제거됨.
  • 참조성이 제거되지 않아야하므로, decltype(auto) 로도 사용함.
    : 이게 의미하는 것은 effective modern c++ p.27 에 있음.

중급 과정에서 배우자.
: 반드시 함께 공부하자! 김원태!!!
-> chronometry upgrade 에 정리해 놓음.

결론

: template 함수에서 반환타입을 결정할 때는 -> 후위 반환을 통해
반환 타입을 결정하도록 하자.

profile
🔥🔥🔥
post-custom-banner

0개의 댓글