본문 바로가기
개발

decltype

by plzfday 2019. 5. 5.

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& 타입

학습 문서

  1. C++ 기초 플러스 6판
  2. 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

댓글