Search

auto 타입 추론

생성일
2023/02/18 08:09
태그
C++

auto 타입 추론

C++ 11, auto 기본 설명

auto 키워드는 c++ 11 이후에 새롭게 태어났다.

 auto 키워드?

주로 타입 추론 , 데이터 타입 추론 , 자동 데이터 추론 , 초기화 값에 따라 알아서 데이터 타입을 정해주는 키워드 라고 불린다.
auto 키워드는 선언한 변수나 람다식의 타입을 컴파일러에게 추론하도록 맡긴다.
`auto는 초기화 값에 다라 알아서 데이터 타입을 정해주는 키워드`
auto를 사용하면 아래 예제처럼 변수를 선언할 수 있다
auto a1 = 10; // int 타입 auto a2 = 10.0f; // float 타입 auto a3 = "c"; // char 타입 auto a4 = "emptyHead"; // string 타입 auto a5 = {10, 20, 30}; // int 배열 타입
C++
복사
→ 이런식으로 따로 타입을 정해주지 않아도 알아서 변수의 타입을 정해주는 키워드
auto 키워드는 컴파일러에 의해서 타입이 추론(타입 예상)이 되므로, auto로 선언한 변수 위에 마우스를 가져다 대면 추론한 타입이 나온다.

 auto에 const, const& 한정자가 붙을 때

auto를 그냥 사용할 수 있지만, 한정자와 함께 사용함으로써 효율을 더 높일 수 있다.

1. auto와 &, * 함께 사용하기

&, * 특성은 무엇인가?
→ 복사가 되지않고, 주소를 가리키거나 참조를 한다. 복사가 아닌 것.
이것을 명확하게 표기하기 위해서
auto& auto*
C++
복사
이렇게 받아올 수 있다. &로 예를들면
vector<int> v = {1, 2, 3, 4, 5};
C++
복사
라는 벡터가 있고, 이 벡터의 모든 값들을 x 2 해야한다고 할 때,
for문을 이용해서 아래와 같이 사용할 수 있다.
for (auto it = v.begin(); it != v.end(); ++it) { *it *= 2; }
C++
복사
이런식으로 auto를 이용해서 vector<int>::iterator 타입을 대신해서 사용할 수 있지만,
&와 range based for 문을 이용하면 훨씬 있어보인다(?)
for (auto& elem : v) { elem *= 2; }
C++
복사
더 깔끔해졌다.
누가봐도 명확히 * 타입이거나, & 타입인 경우, auto의 타입 추론에 의해서 *, & 로 받아오긴 한다.
하지만 명확하게 표현하기 위해서 누가봐도 명확한 경우에도, 써주는 것을 추천한다.

2. auto와 const 함께 사용하기

const auto a = 10; // const int 타입 const auto b = "emptyHead"; // const std::string 타입 const auto c = 'c'; const auto d = 11.0f;
C++
복사

3. auto와 const& 함께 사용하기

const& auto a = 20; // const int& 타입 const& auto b = "emptyHead"; // const std::string& 타입 vector<[인자의 메모리 크기가 큰 클래스 등]> v; for (const auto& elem : v) { // vector의 인자로 들어가 있는 클래스, 변수의 값을 바꿀거는 아니고, // 값을 이용해서 출력하거나 할때, 복사는 비용이 너무 크니까 const & 이용하는것을 추천
C++
복사
const만 이용해서 대입을 하다보면, 복사 비용이 들기 때문에, 상대적으로 복사 비용이 많이 드는 변수, 클래스 등은 const& 를 이용해서 사용할 수 있다.