Initializer List

콜론 뒤 목록은 대입이 아니라 멤버가 태어나는 순서표다

초기화 리스트는 생성자 본문보다 먼저 실행되며, const·참조·기본 생성자 없는 멤버는 이 목록에서 반드시 만들어야 합니다.

01저장 공간객체가 놓일 메모리가 준비됩니다.
02기반 클래스상속이 있으면 부모 부분이 먼저 초기화됩니다.
03멤버 선언 순서목록 순서가 아니라 클래스 안의 선언 순서로 태어납니다.
04생성자 본문이미 만들어진 멤버를 검증하거나 보완합니다.
본문 대입: 늦다
Student(...) {
  name = n;
  id = i;
  GPA = g;      // const면 불가
  course = c;   // 참조면 불가
}
초기화 리스트: 생성 시점
Student(...)
  : name(n),
    id(i),
    GPA(g),
    course(c) {
  validate();
}
1 선언 순서 name 불필요한 기본 생성 후 대입을 피합니다.
2 선언 순서 id 시작값을 생성 시점에 바로 넣습니다.
3 선언 순서 GPA const 멤버라 본문 대입으로 바꿀 수 없습니다.
4 선언 순서 course 참조 멤버는 처음부터 대상에 묶여야 합니다.
주의: 목록에 적은 순서가 아니라 멤버 선언 순서가 실제 초기화 순서입니다. 경고와 오독을 피하려면 목록도 선언 순서와 맞춥니다.