>백엔드 개발 >C++ >`std::array` 및 유사한 집계에 대한 C 이니셜라이저 목록에 언제 외부 중괄호가 필요합니까?

`std::array` 및 유사한 집계에 대한 C 이니셜라이저 목록에 언제 외부 중괄호가 필요합니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-05 03:17:18793검색

When Are Outer Braces Required in C   Initializer Lists for `std::array` and Similar Aggregates?

초기화 목록에서 외부 중괄호를 생략할 수 없는 경우

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.