5. 명시적 타입 선언보다는 auto를 선호하라
type inference : auto 키워드를 사용하면 초기화값의 형식에 맞춰 선언하는 인스턴스의 형식이 자동으로 결정된다.
auto : 선언된 변수의 초기화 식을 사용하여 해당 형식을 추론하도록 컴파일러에 지시한다.
[auto 특징]
- 반드시 초기화
- 이식성 또는 효율성 문제 유발를 유발하는 타입 불일치 발생 가능성 적음
[auto 발생 가능 문제]
- 함수의 반환타입 or 람다 매개변수에 쓰일 땐 템플릿 타입 추론으로 적용 (원래는 auto 타입 추론)
- 보이지 않는 프록시 타입 때문에 auto가 초기화 표현식의 타입을 잘못 추론할 수 있다. (6번에서 자세히)
6. auto가 원치 않은 타입으로 추론될 때에는 명시적 타입의 초기치를 사용하라
[Design Patterns PROXY(프록시 패턴)]
- 대리자를 통해 다른 객체에 대한 접근을 제어
: 대리자에 일을 맡기면 그 일을 처리하고 완료되면 결과를 알려줌
- 자신이 상대하는 대상과 동일할 인터페이스를 제공
- 원격지 프록시, 가상프록시, 보호용프록시, 스마트 참조자(포인터) 가 있음
-> 프록시 클래스 중에 클라이언트에게 명백히 드러나도록 설계된 std::shared_ptr와 std::unique_ptr와 같은 좋은 클래스들도 있지만, 대부분 은밀하게 작동되도록 보이지 않게 숨겨져있다. 따라서 타입추론 기법인 auto와는 잘 맞지 않다.
-> 만약 auto가 프록시 클래스 타입을 추론하고 있다면 auto를 버리는 것이 아니라 auto가 원래 의도했던 타입을 추론하게 한다. 타입 명시 초기치 관용구는 auto가 원하는 타입을 추론하도록 강제한다.
[Explicitly typed initializer idiom (타입 명시 초기치 관용구)]
- 초기화에 쓰이는 표현식이 산출하는 타입과는 다른 타입으로 변수를 생성하고자 하는 의도를 명확하게 나타내는데에 유용함.
- auto가 원하는 형식을 추론하여 설정하도록 함.
'C++ > Modern Effective' 카테고리의 다른 글
[Modern Effective C++] ch04. Smart Pointer (0) | 2020.03.02 |
---|