초기화 목록에서 외부 중괄호를 생략할 수 없는 경우
C에서는 특정 유형의 초기화 목록을 처리할 때 외부 중괄호가 초기화 목록에 필요합니다. 집계 구조, 특히 POD(Plain Old Datatypes)이거나 사용자 정의 생성자가 없는 구조입니다. 표준 라이브러리에 있는 대부분의 컨테이너와 달리 std::array는 이 범주에 속합니다.
std::array 중괄호를 사용한 초기화
다음 예를 고려하세요.
std::array<A, 2> a1 = { {0, 0.1}, {2, 3.4} };
여기서 A는 두 개의 데이터 멤버가 있는 구조체입니다. {0, 0.1}, {2, 3.4}를 묶는 추가 중괄호 세트는 std::array의 내부 배열을 초기화하기 때문에 필수적입니다. 이것이 없으면 컴파일러는 "초기화 프로그램이 너무 많습니다" 오류를 보고합니다.
직접 배열 초기화
이 동작은 직접 배열 초기화와 유사합니다.
Aarray a1 = { {0, 0.1}, {2, 3.4} };
여기에서는 Aarray 구조체의 내부 배열 데이터가 직접 초기화됩니다. 외부 중괄호가 없으면 컴파일러는 std::array와 동일한 오류에 직면하게 됩니다.
스칼라 유형과의 비교
double과 같은 스칼라 유형의 배열을 초기화할 때, 스칼라 유형은 집계가 아니기 때문에 외부 중괄호는 선택 사항입니다. 예를 들면 다음과 같습니다.
std::array<double, 2> a2 = {0.1, 2.3};
이 경우 배열의 데이터 멤버가 이미 초기화 목록 {0.1, 2.3}에 의해 직접 초기화되었으므로 추가 중괄호가 필요하지 않습니다.
위 내용은 `std::array` 및 유사한 집계에 대한 C 이니셜라이저 목록에 언제 외부 중괄호가 필요합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!