백준에서 문제를 풀다보면 int 타입으로는 결과물을 정확히 저장 못해서 틀리는 경우가 있다.
그런 상황을 미연에 방지하고 데이터 손실 예방은 물론 더욱 유연한 코드를 짜기 위해 'auto'라는 타입을 활용할 수 있다.
예시)
auto a = 123;
auto b = "abc";
std::cout << a << " " << b; // 123 abc
위에서 알 수 있듯이, auto는 할당할 값에 대하여 적절한 타입을 추론하여 준다.
그러나 다른 타입의 형태라도 초기화형태가 같은 경우는 auto 타입에서 지정된 형태로 추론되게 된다.
compiler에 지정된 auto 추론 형태
auto a = 123; // int
auto b = { 1, 2, 3 }; // std::initializer_list<int>
auto 추론 형태 지정해 주기
auto a = short{ 123 }; // short
auto b = std::vector<int>{ 1, 2, 3 }; // std::vector<int>
auto 형태를 활용한 함수 생성도 가능하다.
auto f(char const a) { return toupper(a); }
auto f = [](char const a) { return toupper(a); };
또한, auto타입은 const/volatile, &(참조 지정자)와 같은 추가적인 특성을 자동으로 추정해주지 않는다.
class c {
int a = 5;
public:
int& f() { return a; }
};
c temp;
auto a = temp.f();
a++;
std::cout << temp.f(); // 5
c temp;
auto& a = temp.f();
a++;
std::cout << temp.f(); // 6
class에서 함수 f가 참조를 반환한다고 명시되어 있지만, auto를 통해 받은 데이터는 그 참조가 아니라 그 값 자체다.
따라서 auto 그 자체로는 int&라 명시된 리턴값을 반영하지 못하기 때문에 'auto&'이라 확실히 해주는 것이 중요하다.
auto란 타입을 보고 예전엔 그냥 지나쳐 갔었는데 충분히 활용의 필요성을 느꼈다.
생각보다 어려운 개념도 사용법도 아니여서 몰랐다면 한 번 자신의 코드 습관에 변화를 줘 보는 것은 어떨까.
'대학생활' 카테고리의 다른 글
Docker란 무언인가.. (What is Docker??) (1) | 2022.10.03 |
---|---|
[C++] Static Polymorphism & Dynamic Polymorphism (0) | 2022.09.26 |
DB 관련 개념 정리 (0) | 2022.09.18 |
터미널 git 다루면서 어려웠던 점 (0) | 2022.08.24 |
[Django] User에 포인트 추가하기 (0) | 2022.02.20 |