728x90
특징
- 일종의 조커카드로 타입을 명시적으로 지정하지 않아도 타입을 추론 가능하게 하는 타입이다. 이를 형식추론 혹은 형식연역(type deduction, type inference)
- c+14 에서 함수 리턴값으로 auto 키워드가 사용 가능
주의
- const나 &가 붙은 타입은 auto로 정확하게 타입추론이 되지 않는다. 보통 const나 &를 무시한 나머지 타입을 근거로 추론하는 것 같다.
- 함수 매개변수 타입으로 사용 불가능
- auto 키워드를 사용하여 선언할 경우에 반드시 초기값이 있어야 한다.
사용 예제
#include <iostream>
#include <vector>
class Knight
{
};
// 함수 매개변수 타입으로 쓰인 경우 -> 컴파일 에러.
int Func(auto num1, auto num2)
{
}
// 함수 리턴 타입으로 auto가 사용 가능.(c++14부터)
auto Func1(int num1, int num2)
{
return num1 + num2;
}
int main()
{
// 정상적으로 함수 추론이 가능한 경우.
{
auto a = 3; // int
auto b = 3.14f; // float
auto c = 1.23; // double
auto d = Knight(); // class
auto e = "rookiss"; // string literal
auto f = Func1(1, 2); // int
}
// 컴파일 에러. auto 타입 사용시 반드시 초기값이 필요하다.
{
auto a;
}
// const와 &가 포함된 타입은 정확하게 추론하지 못 하는 auto.
{
int a;
int& ref = a;
const int cst = a;
auto refAuto = ref; // int
auto cstAuto = ref; // int
}
// auto 특성을 제대로 이해하고 사용된 예
{
std::vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
for (size_t i = 0; i < v.size(); i++)
{
//!주의! 이 경우 여전히 int 타입으로 추론합니다.
//auto data = static_cast<int&>(v[i]);
auto& data = v[i]; // int&
data = 100;
}
}
// stl literator에 사용된 auto
{
std::vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
// auto 사용 이전.
for (std::vector<int>::iterator it = v.begin(); it < v.end(); it++)
{
*it = 1;
}
// auto 사용 후.
for (auto& it : v)
{
it = 1;
}
}
}
결론
- 특별하게 타입이 길지 않는 이상 명시적으로 타입을 지정하는게 가독성 측면에서 좋은 것 같다.
- stl literator 같은 경우 사용 빈도가 높고 타입이 길어지는 경우가 많으니 auto를 사용하기 적합
- 태블릿과 같이 고급기법에서 auto가 활용 되기도 한다.
공부한 내용을 개인적으로 복습하기 쉬운 형태로 정리했습니다.
잘못된 내용이 있는 경우 언제든 댓글 혹은 이메일로 지적해주시면 감사드립니다.
728x90
'Programming Language > C++' 카테고리의 다른 글
{} 중괄호 초기화 (0) | 2022.02.06 |
---|---|
using - type alias declaration (0) | 2022.02.06 |
함수 객체(함수자, Functor) (0) | 2022.02.06 |
함수 포인터 (0) | 2022.02.06 |
2-2_입력( <<,manipulator,조정자) (0) | 2021.12.07 |