초기화 목록에서 외부 중괄호를 생략하는 경우
C에서 구조체 또는 배열과 같은 집계 유형을 초기화할 때 다음과 같은 문제가 발생할 수 있습니다. 초기화 목록에서 외부 중괄호를 사용할지 여부에 대한 질문입니다. POD(Plain Old Data)이고 std::array와 같은 사용자 정의 생성자가 없는 집계 유형의 경우 외부 중괄호가 필요합니다. 그러나 내장 유형과 같이 이러한 제한이 없는 집계의 경우 이러한 중괄호를 생략할 수 있습니다.
POD 집계에 대한 명시적 중괄호
std::array<A, 2> a1 = { {0, 0.1}, {2, 3.4} };
내부 중괄호가 없기 때문에 컴파일러가 "초기화 프로그램이 너무 많습니다"라고 보고합니다. 중괄호를 사용한 올바른 초기화는 다음과 같습니다.
std::array<A, 2> a1 = { {{ {0, 0.1}, {2, 3.4} }} };
비 POD 집계에 대한 중괄호 제거
POD 집계와 달리 내장 유형과 같은 비 POD 집계 이니셜라이저 목록에는 명시적인 외부 중괄호가 필요하지 않습니다. 예를 들어,
std::array<double, 2> a2 = {0.1, 2.3};
예제에는 내부 배열에 중괄호가 포함되어 있지 않습니다. 이는 double이 집계가 아니고 초기화 목록이 구성 double 요소를 직접 초기화하기 때문입니다.
표준의 추가 통찰력
C 표준은 언제 초기화 목록에서 외부 중괄호를 생략할 수 있습니다.
이를 통해 중괄호를 사용하거나 사용하지 않고 초기화할 수 있습니다. 초기화 절은 초기화할 멤버 수와 일치합니다.
위 내용은 C 이니셜라이저 목록에서 외부 중괄호를 언제 생략해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!