<0> 용어 정리
1. 선언(Declaration): 코드에 사용되는 대상의 이름과 자료형을 컴파일러에게 알림
2. 시그니처: 함수의 매개 변수 리스트와 반환 타입
3. 정의(Definition): 클래스나 클래스 템플릿의 경우 멤버를 넣어 준 결과를 뜻하고, 함수나 함수 템플릿은 코드의 본문을 제공하는 것
4. 초기화: 어떤 객체의 최초 값 부여, 사용자 정의 타입일 경우 생성자에 의해 이루어짐
- 기본 생성자: 인자 없이 호출되는 생성자
- 복사 생성자: 같은 타입의 객체로부터 초기화할 때 호출되는 함수, 값에 의한 전달
- 복사 대입 연산자: 어떤 객체 값을 같은 자료형의 객체에 복사
5. STL: 표준 템플릿 라이브러리, 알고리즘/컨테이너/반복자
6. Undefined Behavior: 널포인터 역참조, 유효하지 않은 index 접근 등 예측할 수 없는 행동
7. TR1: Technical Report 1로, C++ 표준 라이브러리에 새로 추가되는 기능들에 대한 명세
<1> C++에 왔으면 C++의 법을 따릅시다
1. C++는 다중 패러다임 프로그래밍 언어로, C/객체 지향 C++/템플릿 C++/ STL의 연합체이다
- C++의 어떤 부분을 사용하는지에 따라 효과적인 프로그래밍 규칙이 달라진다.
2. #define 대신 const, enum, inline을 떠올리자
- 매크로 대신 상수를 쓰면 컴파일러의 기호 테이블에 들어가고 컴파일 거친 코드의 크기가 더 작게 나온다.
- 상수 포인터를 정의할 때는 포인터가 가리키는 대상도 const로 선언해야 한다.
- 나열자 둔갑술! 정적 클래스 상수에 대해서 클래스 내 초기화를 금지 당했다면 사용하자. 동작 방식이 const보다 #define에 가깝다.
- 함수 매크로 사용 시 #define보다 인라인 함수 사용
3. 낌새만 보이면 Const를 들이대 보자
- Const char* p = g; 와 Char* const p = g;
- Const로 컴파일러가 사용상 에러를 잡아 내는 데 도움을 준다.
- Const 키워드 유무 차이만 있는 멤버 함수는 오버로딩이 가능하다.
- 컴파일러 쪽에서 보면 비트적 상수성을 지켜야 하지만, 사용자는 논리적 상수성을 사용하여 프로그래밍해야 한다.
- Mutable: 비정적 멤버의 비트 수준 상수성을 없애 주는 키워드
- 상수 멤버와 비상수 멤버 함수가 기능적으로 같을 때는 코드 중복을 피하는 것이 좋은데, 이때 비상수 버전이 상수 버전을 호출하도록 만들자. (const_cast, static_cast 이용)
4. 객체 사용 전 반드시 그 객체를 초기화하자
- 생성자를 만들 때 멤버 초기화 리스트를 사용하자. 사용하지 않으면 기본 생성자-복사 대입 생성자 호출을 거치는데, 사용하면 복사 생성자만이 호출되므로 더 효율적이다.
- 비지역 정적 객체의 초기화 순서는 개별 번역 단위에서 정해진다. 서로 다른 번역 단위에 정의된 비지역 정적 객체들의 초기화 순서는 정해져 있지 않으므로, 이에 영향 받지 않도록 설계한다.
- 비지역 정적 객체를 지역 정적 객체로 바꾼다. (싱글톤)
'개인 공부 > C++' 카테고리의 다른 글
E1735 바깥쪽 함수의 지역 변수는 캡처 목록에 있지 않는 한 람다 본문에서 참조할 수 없습니다. (0) | 2022.11.21 |
---|---|
[c++] std::back_inserter (0) | 2022.09.23 |
SafeInt 라이브러리 (0) | 2022.05.20 |
범위 기반 for문 (0) | 2022.05.19 |
변환 생성자와 explicit (0) | 2022.05.16 |