C++ decltype 키워드(C++11)

프로그래밍/C++ 2019.08.26 댓글 Plorence

decltype키워드

다음 내용은 C++11부터 적용된 내용이고 C++11부터 decltype이라는 키워드가 생겼습니다.

decltype키워드는 주어진 이름이나 표현식의 구체적인 타입을 알려주는 키워드입니다.

 

사용 방법

int a = 0;
decltype(a) b = a; //a와 동일한 타입의 변수 만들기
delctype(a+b) c = a+b; //a+b와 동일한 타입의 변수 만들기

 

컴파일러는 어떤 타입을 사용할 것인가

컴파일러는 어떤 타입을 사용할 것인지 결정하기 위해서 체크리스트를 거쳐야 합니다.

decltype(expression) var;

1

만약 expression이 괄호가 없는 식별자일 경우라면 var는 식별자와 동일한 타입이 되며, const를 포함합니다.

double x = 0;
double y = 0;
double & rx = x;
const double * pd;
decltype(x) w; //double
decltype(rx) u = y; //double &
decltype(pd) v; //const double *

2

expression이 함수 호출일 경우에는 var는 함수 리턴형 타입을 갖게 됩니다.
이때 호출은 평가되지 않고 컴파일러는 리턴 타입을 얻기 위해서 원형을 검사합니다.

#include <iostream>
long func() {
       return 1000;
}
int main(void) {
       decltype(func()) = 1000;
}

3

expression이 lvalue일 경우, var는 expression 타입을 참조합니다.

3단계를 적용하기 위해서는 expression은 괄호가 없는 식별자가 되어선 안됩니다.

int a = 100;
decltype(a) b= 1000; //int
decltype((a)) c= b; //int &

4

만약 어떠한 특별한 경우도 적용된 적이 없을 경우, var는 expression과 동일한 타입이 됩니다.

#include <iostream>
long func() {
       return 1000;
}
int main(void) {
       int a = 100;
       decltype(a+1) c= 1000; //int
       decltype(1L) d; //long
       decltype(a +d) e; //long
}

댓글