5. 명시적 타입 선언보다는 auto를 선호해라.
auto 타입 장점
-반드시 초기화 필요
-이식성 또는 효율성 문제를 유발할 수 있는 타입 불일치가 발생하는 경우가 거의 없음
-변수의 타입을 명시적으로 지정할 때보다 타자량 더 적음
-초기화 표현식의 타입이 변하면 자동으로 변화하기에 리펙터링이 수월해짐
auto 타입의 문제점
-함수의 반환 타입이나 람다 매개변수에 쓰인 auto에 대해서는 auto 타입 추론이 아니라 템플릿 타입 추론이 적용
>중괄호 초기치를 돌려주는 반환 타입으로 auto로 지정하면 컴파일이 실패
-보이지 않는 프록시 타입 때문에 auto가 초기화 표현식의 타입을 잘못 추론할 수 있음
->auto를 잘 활용하면 타자의 양이 줄어들 뿐만 아니라 형식을 직접 지정했을 때 겪게 되는 정확성 문제와 성능 문제도 방지할 수 있음
6. auto가 원하지 않는 형식으로 연역될 때에는 명시적 형식의 초기치를 사용해라
보이지 않는 proxy class는 auto와 맞지 않는다.
이유: 이러한 클래스는 해당 객체의 수명이 한 문장 이상으로 연장되지 않는다는 가정하에서 설계되는 경우가 많음. 따라서 그런 형식의 변수를 생성하는 것은 라이브러리 설계의 근본적인 가정들을 위반
auto someVar="보이지 않는" 대리자 클래스 형식의 표현식;
해결책: auto 가 다른 형식을 연역하도록 강제 (explicitly typed initializer idiom 즉 형식 명시 초기치 관용구는 auto가 원하는 형식을 연역하도록 강제한다.)
-> 보이지 않는 대리자 형식 때문에 auto가 초기화 표현식의 형식을 잘못 연역할 수 있다
->형식 명시 초기치 관용구는 auto가 원하는 형식을 연역하도록 강제
'modern effective c++' 카테고리의 다른 글
effective modern c++ chap.4 (0) | 2020.03.02 |
---|---|
effective modern c++ chap.3 (0) | 2020.02.24 |