(생략)
decltype
은 표현식의 타입을 반환하는 함수와 같다.
decltype(f(g(x, y, z)+3*x)) a = f(g(x, y, z)+3*x);
이 기능은 명시적 타입이 필요한 곳에서 매우 중요하다.
template<typename Vector1, typename Vector2>
auto operator+(const Vector1& v1, const Vector& v2){
vector<decltype(v1[0]+v2[0])> v;
//v1[0]+v2[0]을 수행하지는 않음
...
}
decltype
은 타입 수준에서만 동작하며, 실제로는 연산을 수행하지 않는다. 즉 위 예제에서 v1
이나 v2
가 빈 벡터라도 상관 없다.
decltype(expr) v = expr;
decltype(auto) v = expr;
위 식에서 expr
이 길다면 decltype(expr)
코드가 복잡해진다. 이 경우 아랫줄과 같이 decltype(auto)
를 해주는 것이 좋다.
typedef
와 using
을 이용해 타입을 정의할 수 있다. C++에서는 using
을 사용하도록 하자.
typedef double value_type;
using value_type = double;
typedef double da1[10];
using da2 = double[10];
typedef float float_fun1(float, int);
using float float_fun2 = float(float, int);