decltype은 키워드이고 declared type의 줄임말이다. 타입을 정해주는 녀석이라고 보면 되겠다.
auto와의 차이는 아직 나도 잘 모르겠으니까 추후에 업데이트하도록 하겠다.
int x;
decltype (x) y; // x와 동일한 타입인 y를 만들어라!
컴파일러가 저 타입을 결정하는 것인데 여기에는 규칙이 있다.
decltype (expression) var;
1단계: expression이 괄호가 없는 식별자(identifier) 면, var은 expression과 같은 타입이다.
double x = 5.5;
double y = 7.9;
double& rx = x;
const double* pd;
decltype(x) w; // double 타입
decltype(rx) u = y // double & 타입
decltype(pd) v; // const double * 타입
2단계: expression이 함수 호출이면 var의 타입은 함수의 리턴 타입이다.
bool f();
decltype (f()) m; // m은 bool 타입
3단계: expression이 lvalue면, var은 expression 타입을 참조한다. expression은 괄호가 있어야만 3단계에 적용된다.
double xx = 4.4;
decltype ((xx)) r2 = xx; // r2는 double & 타입
decltype (xx) w = xx; // w는 double 타입
4단계: 어떤 경우도 적용되지 않는다면, var은 expression과 동일한 타입이다.
int j = 3;
int& k = j;
int& n = j;
decltype (j + 6) i1; // i1은 int 타입
decltype (100L) i2; // i2는 long 타입
decltype (k + n) i3; // i3는 int 타입
k + n 표현식은 int형이기 때문에 i3는 참조 변수가 아니다.
decltype이 여러 번 쓰인다면 typedef으로 표현할 수도 있다.
typedef decltype (x + y) xytype;
xytype xpy = x + y;
xytype arr[10];
xytype& rxy = arr[2];
expression이 rvalue의 경우에는 다음과 같다.
int&& m1 = 1;
decltype (m1) x = 1; // x은 int&& 타입
decltype ((m1)) y = m1; // y는 int& 타입
학습 문서
- C++ 기초 플러스 6판
- IBM Knowledge Center
'개발' 카테고리의 다른 글
분할 정복을 이용한 n제곱 계산 (0) | 2019.08.07 |
---|---|
국어 수능 완성 1회차 (0) | 2019.07.24 |
float4에서 w의 의미(feat. 동차좌표계) (0) | 2019.05.07 |
함수 매개변수 작성 시 주의점 (0) | 2019.05.05 |
함수 포인터 (0) | 2019.05.05 |
2의 2000승 출력하기(C/C++) (0) | 2018.05.15 |
댓글