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
}
댓글