[모던C++입문] 3.4 타입 추론과 정의
- 📕 Book/모던C++입문
- 2021. 7. 11.
3.4 타입 추론과 정의
auto 변수 타입
- auto타입은 모든 표현식에 적용되는 자동타입이 아닌 한번 정해진 뒤에는 변하지 않는 타입
auto i = 2 * 7.5, j = std::sqrt(3.7); //정상: double
auto i - 2 * 4, j = std::sqrt(3.7); //오류: i=int j=double
auto i = 2 * 4, j; //오류: j가 초기화되지 않음
auto v = g(x, y, z); //g의 결과 타입
auto& ri = i; //i에 대한 레퍼런스
const auto& cri = i; //i에 대한 const 레퍼런스
auto&& ur = g(x, y, z); //g결과에 대한 포워드 레퍼런스
표현식의 타입 (C++11)
- decltype은 표현식의 타입을 반환하는 함수
- 리턴 타입 추적(Trailing Retrun Type) 기능으로도 사용할수 있다
int a = 10;
decltype(a) b = 2; //int
template<typename V1, typename V2)
auto operator+(const V1& rv, const V2 lv) -> vector<decltype(rv[0] + lv[0])>
{
return rv + lv;
}
decltype(auto) (C++11)
int i = 1;
int& GetRefInt()
{
return i;
}
int main(int argc, const char * argv[])
{
auto autoVar = GetRefInt(); //autoVar은 int 타입
decltype(auto) declVar = GetRefInt(); //declVar은 int& 타입
}
타입 정의하기 (C++11)
- typedef는 앞의 타입을 뒤에 이름으로 축소하여 사용 (기존 C++)
- using은 뒤의 타입을 앞의 이름으로 사용 (C++11)
- 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);
- using으로 템플릿 에일리어스(Template Alias)를 정의할 수 있다.
template <typename T>
using Tvec = vector<T, xallocator<T>>;
Tvec<int> Tlist { 1, 2, 3 };
반응형