On this page
article
Designated Initializer
1. Aggregate Initialization (집합 초기화)
배열이나 C 스타일 구조체처럼 중괄호
{}
를 이용한 초기화 방식조건:
- 모든 멤버는 public
- 상속 또는 가상 함수 없음
- 사용자 정의 생성자 없음
struct Point {
int x, y, z;
};
Point p1 = {1, 2, 3}; // 위치 기반 aggregate 초기화
2. Designated Initializer (지정 초기화, C++20~)
- C++20부터 aggregate 초기화 시 멤버 이름을 명시하여 초기화 가능
Point p2 = {.x = 1, .y = 2, .z = 3}; // 지정 초기화
- 멤버 순서에 관계없이 명시적으로 초기화 가능
- 모든 멤버를 지정하지 않아도 나머지는 0으로 초기화됨
Point p3 = {.y = 5}; // x=0, y=5, z=0 으로 초기화됨
예시: struct에만 사용 가능
struct Point3D {
int x, y, z;
};
Point3D p = {.z = 3, .x = 1}; // y는 0으로 채워짐
3. 생성자가 없어도 괄호 초기화 가능
struct Point3D {
int x, y, z;
};
Point3D p(1, 2, 3); // 생성자 없어도 괄호 초기화 가능
- 단, 이 역시 aggregate 조건을 만족해야 함