본문 바로가기

Programming

이펙티브 모던 C++_1

[Effective Modern C++] 2015 스콧 마이어스 저
" C++11 과 C++ 14 를 효과적으로 사용하는 42가지 방법

 

 

 

1장 형식 영역

 

1. 템플릿 형식 연역 규칙을 숙지하라

 1.1 템플릿 형식 연역 도중에 참조 형식의 인수들은 비참조로 취급된다. 즉, 참조성이 무시된다.
 1.2 보편 참조 매개변수에 대한 형식 연역 과정에서 왼값 인수들은 특별하게 취급된다.
 1.3 값 전달 방식의 매개변수에 대한 형식 연역 과정에서 const 또는 volatile(또는 그 둘 다인) 인수는 비 const, 비 volatile 인수로 취급된다.

**template T와 ParamType T의 형식이 달라질 수 있다.

 1.4. 템플릿 형식 연역 과정에서 배열이나 함수 이름에 해당하는 인수는 포인터로 붕괴한다. 단, 그런 인수가 참조를 초기화하는 데 쓰이는 경우에는 포인터로 붕괴하지 않는다.

 

 

 


 

 

2. auto의 형식 연역 규칙을 숙지하라

2.1 auto 를 이용해서 변수를 선언할 때 auto 는 템플릿의 T와 동일한 역할을 하며 변수의 형식 지정자는 paramType와 동일한 역할을 한다.

 

2.2 auto 형식 연역은 중괄호 초기화가 std::initializer_list를 나타낸다고 가정하는 반면 템플릿 형식 영역은 그렇지 않다.

함수의 반환 형식이나 람다 매개변수에 쓰인 auto에 대해서는 auto 형식 영역이 아니라 템플릿 형식 연역이 적용된다.

 

auto 형식, 반환, 람다 매개변수에 쓰일 경우에는 허용되지 않는다.

 

 


 

 

3. decltype의 작동 방식을 숙지하라.

3.1. decltype 은 항상 변수나 표현식의 형식을 아무 수정 없이 보고 한다.

3.2. decltype 형식이 T이고 이름이 아닌 왼값 표현식에 대해서는 항상 T&를 보고 한다.

 

int a

decltype(a)// decltype : int

decltype((a)) // decltype : int&

 


 

 

4. 연역된 형식을 파악하는 방법을 알아두라

1. IDE 편집기 (마우스 커서 올리기)

2. 컴파일러의 진단 메세지

- 선언만 해둔 상태에서 인스턴스화 하면 인스턴스화 할 템플릿 정의가 없어서 컴파일 오류가 발생한다. 해당 오류 메세지에는 타입 정보가 들어있다.

3. 실행 시점 출력 typeid().name // 믿을만하지 않다.

 

 

참고 사이트 : blog.naver.com/likeme96/220951412575

'Programming' 카테고리의 다른 글

이펙티브 모던 C++_3  (0) 2020.11.15
이펙티브 모던 C++_2  (0) 2020.11.08
윈도우 시스템 프로그래밍_8  (0) 2020.10.25
윈도우 시스템 프로그래밍_7  (0) 2020.10.18
윈도우 시스템 프로그래밍_6  (0) 2020.10.11