auto
- 선언으로부터 데이터를 자동으로 유추해서, 컴파일러가 알아서 타입을 지정해주는 키워드.
이점
1. 선언가 동시에 초기화를 해줘야 하기때문에, 초기화를 하지 않아 발생되는 버그를 예방할 수 있다.
2. 함수의 리턴 타입과 받는 타입이 달라 발생될 수 있는 버그를 예방 할 수 있다.
ex) vector 등의 size()는 size_t 타입이지만, 보통, int 형으로 반환받을 경우가 많은데, 자료형 바이트 크기가 달라 문제가 발생될 수 있다.
vector<int> vecData{1,2,3,4,5};
auto nSize = vecData.size();
auto nSize2 = int{vecData.size()}; //에러 발생. not allow narrowing conversion.
3. 처리해야 할 자료형에 대해서 신경을 안써도 된다.
vector<int>::iterator iter = vecData.begin(); 보단.
auto iter = vecData.begin() 으로 처리할 수 있어. 반환 타입을 신경쓰지 않아도 된다.
auto iterEnd = vecData.end();
for(auto iter = vecData.begin(); iter != iterEnd; iter++)
{
}
주의사항
이동할 수 잆는 자료형은 AUTO를 사용할 수 없다.
atomic<int> m_nData = 20;
auto atomicData = m_nData;
class CTest
{
public:
CTest() = delete;
};
auto classObject = CTest(); 이경우도 에러.
'C++ > C++ 11 14 17' 카테고리의 다른 글
C++17, structure binding, if(init; condition) switch(init;condition) (0) | 2018.04.18 |
---|---|
C++ 11 ENUM (0) | 2018.04.11 |
Aggregate and POD (0) | 2018.04.04 |
함수포인터, std::function (0) | 2017.04.19 |
R 레퍼런스 타입. (0) | 2017.01.30 |