0. Modern C++
C++ 11 (2011년도) 이후의 개선된 버전을 이름.
1. auto
(1) 기본 사용법
class Knight
{
public:
int _hp;
};
여러가지 타입을 가진 변수들을 만들어보자.
int main()
{
int a = 3;
float b = 3.12f;
double c = 1.23;
knight d = Knight();
const char* e = "ABC"
//~~
이런 여러가지 타입의 변수들을 auto 문법을 이용하면
//~~
auto a = 3;
auto b = 3.12f;
auto c = 1.23;
auto d = Knight();
auto e = "ABC"
컴파일러가 자동으로 판별하여 타입을 맞춰준다(형식 연역 ; Type Deduction).
(2) 컴파일러의 추론을 유도하기
const auto test1 = b;
auto* test2 = d;
본래 float형 이었던 b를 test1에 const를 붙여서 const float형으로 만들어주거나
본래 const char의 포인터형이었던 d를 test2에 대입할 때, auto 뒤에 포인터 연산자를 붙여 test2도 const char의 포인터형으로 추론하게 할 수 있다.
2. 주의점
아무것도 붙어있지 않은 auto는 const와 참조 연산자 '&'를 무시한다.
따라서 const 또는 참조 연산자를 사용할 것이라면, auto의 앞 뒤에 명시해주어야 한다.
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
for (vector<int>::size_type i = 0; i < v.size(); i++)
{
auto& data = v[i];
data = 100;
}
위의 코드에서 &를 제거하면 기본적으로 int형으로 추론되어 벡터의 요소들의 값을 변경하지 못한다.
3. 언제 사용할까?
(1) 코드의 타이핑이 길어질 때
(2) 변수의 타입을 굳이 알 필요가 없을 때
- map, multimap, set, multiset에서 페어링 할 때
map<int, int> m;
auto pair = m.insert(make_pair(1, 100);
- 반복자를 사용할 때
for (vector<int>::iterator it = v.begin(); it != v.end(); ++it)
{
cout << *it << endl;
}
반복자의 형식은 궁금하지 않으므로(어차피 포인터이므로) 단지 사용만 할 때는 이렇게 대체할 수 있다.
for (auto it = v.begin(); it != v.end(); ++it)
{
cout << *it << endl;
}
'기초 C++ 스터디 > 모던 C++' 카테고리의 다른 글
10-6. override, final (0) | 2023.06.20 |
---|---|
10-5. delete - 삭제된 함수 (0) | 2023.06.20 |
10-4. enum class (0) | 2023.06.20 |
10-3. nullptr (0) | 2023.06.20 |
10-2. 중괄호 초기화 (0) | 2023.06.20 |