Post List

2014년 12월 17일 수요일

auto

auto (Visual Studio 2010 이상부터 가능)

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에서는 후행 반환 형식을 명시해줘야 하므로 의미없다.)

댓글 없음:

댓글 쓰기