<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.      객체 사용 전 반드시 그 객체를 초기화하자

  • 생성자를 만들 때 멤버 초기화 리스트를 사용하자. 사용하지 않으면 기본 생성자-복사 대입 생성자 호출을 거치는데, 사용하면 복사 생성자만이 호출되므로 더 효율적이다.
  • 비지역 정적 객체의 초기화 순서는 개별 번역 단위에서 정해진다. 서로 다른 번역 단위에 정의된 비지역 정적 객체들의 초기화 순서는 정해져 있지 않으므로, 이에 영향 받지 않도록 설계한다.
  • 비지역 정적 객체를 지역 정적 객체로 바꾼다. (싱글톤)

+ Recent posts