1. Compile 타임에 Type이 정해진다.
1 2 3 4 | int i = 10; auto a = i; // int auto& b = i; // int& const auto c = i; // const int |
* 단 STL Collection 사용시는 주의해야 한다.
(자세한 사항은 Effective Modern C++ 참조)
1 2 | std::vector<CString> v { _T("John Snow"), _T("Luna Star") }; auto va = v[0]; // CString이 아니라 CString& (Compiler 마다 차이가 있을 수 있음) |
2. Iterator 와 같이 Type이 복잡하고 길어질 경우 사용하면 편리하다.
1 2 3 4 5 | for (std::vector<CString>::const_iterator it = v.begin(); it != v.end(); it++) std::cout << *it << std::endl; for (auto it = v.begin(); it != v.end(); it++) std::cout << *it << std::endl; |
Visual Studio 2008에서 template 함수 내부에서 iterator 활용하는게 문법적 구현이 힘든 부분이 있었는데, auto를 활용하면 쉽게 구현이 된다.
3. Function 의 return 값으로 사용이 가능하다.
(하지만 Visual Studio에서는 후행 반환 형식을 적어줘야 해서 별로 의미는 없다.)
auto f1() -> int { return 1; }
그러나 반환 형식은 Compile 타임에서 명확하게 정해져야 하므로 2가지 이상 Type으로 변환되는 Code는 불가능하다.
1 2 3 4 5 | auto f1(bool check) { if (check) return true; else return 0; } |
(이역시 Visual Studio에서는 후행 반환 형식을 명시해줘야 하므로 의미없다.)
댓글 없음:
댓글 쓰기