2020. 9. 21. 20:25ㆍ프로그래밍/C++
auto
자료형을 추론
실제 자료형은 컴파일하는 동안 결정됨
따라서, 반드시 auto 변수를 초기화해야 됨
포인터와 참조를 받을 수 있음
포인터를 받을 때 : auto 또는 auto* -> 포인터형을 받을 때는 auto* 쓰자(가독성 때문)
참조를 받을 때 : auto&
const도 auto가 이어받음(컴파일러가 알아낼 수 있기 때문)
const 참조 받을 때는 const auto& 쓰자
반복자에는 auto 키워드가 매우 유용
일부 템플릿형 받을때도 유용
auto 베스트 프랙티스
> 명시적이여야 함
> 1. auto보다 실제 자료형 사용을 권장
> 2. 예외: 템플릿 매개변수와 반복자에는 auto 사용
> 3. auto보다 auto* 사용
> 4. auto&보다 const auto& 를 사용
전부 가독성과 관련된 것
런타임 성능은 동일
static_assert
assert
실행 중에 가정(assertion)이 맞는지 평가
오직 디버그 빌드에서만 작동
실패한 assert를 보려면 반드시 프로그램을 실행해야 함
> 모든 코드 경로가 실행되었다고 어떻게 장담할까?
> 일부 어서션은 프로그램을 실행하기도 전에 알 수 있음
"모든 곳에 assert를 쓰자"
> 여전히 유효한 조언
static_assert
컴파일 중에 어서션 평가
컴파일러가 assert 조건이 참인지 아닌지 앎
실패하면 컴파일러는 컴파일 에러를 뱉음
많은 경우에 유용함
static_assert 베스트 프랙티스
최대한 assert보다 static_assert를 사용
> 첫째 "모든 곳에 static_assert를 쓰자"
> 그러고 나면 "모든 곳에 assert를 쓰자"
assert를 사용한다면...
여전히 프로그램을 실행시켜야 됨
실행 도중에만 어서션을 포착. 그것도 오직 디버그 빌드에서만...
static_assert를 사용한다면
컴파일 중에 모든 문제를 즉시 알아챔
또한 컴파일러처럼 생각하는 데도 도움이 됨!
default / delete
'= default' 키워드를 사용하면, 컴파일러가 특정한 생성자, 연산자 및 소멸자를 만들어 낼 수 있음
그래서, 비어 있는 생성자나 소멸자를 구체화할 필요가 없음
또한 기본 생성자, 연산자 및 소멸자를 더 분명하게 표시할 수 있음
> 명확하게 표현하는 것은 항상 좋다
컴파일러가 자동으로 생성자를 만들어 주길 원치 않는다면 '= delete' 키워드를 사용
private 접근 제어자로 빈 생성자를 만드는 트릭은 이제 그만
올바른 에러 메시지도 나옴
default/delete 에 관한 베스트 프랙티스
컴파일러가 코드를 생성하는 암시적 방식에 기댈 필요가 없음
명확해야 함
어디에나 default/delete 키워드를 넣자
final
클래스나 가상 함수를 파생 클래스에서 오버라이딩 못 하도록 하려면 final 키워드를 사용
컴파일 도중에 확인함
당연히 가상 함수가 아니면 쓸 수 없음
override
잘못된 가상 함수 오버라이딩을 막으려면 override 키워드를 사용
컴파일 도중에 검사
당연히 가상 함수가 아니면 쓸 수 없음
offsetof 매크로
특정 멤버가 본인을 포함한 자료 구조의 시작점에서부터 몇 바이트만큼 떨어져 있는지 알려줌
직렬화(serialize, 어떤 데이터를 파일에 쓰는 것)나 역직렬화(deserialize, 데이터를 읽어오는 과정)를 할 때 꽤나 유용
출처 : 포큐아카데미 C++ 언매니지드 프로그래밍
'프로그래밍 > C++' 카테고리의 다른 글
nullptr, 고정 폭 정수형, enum class (0) | 2020.09.21 |
---|---|
STL 알고리듬(Algorithm) (0) | 2020.08.12 |
템플릿(Template) 프로그래밍 2 (0) | 2020.08.10 |
템플릿(Template) 프로그래밍 1 (0) | 2020.07.26 |
큐(Queue) / 스택(Stack) / 리스트(List) 등 (0) | 2020.07.06 |