C 11에서는 C 스타일 배열과 유사하지만 템플릿과 같은 추가 기능을 제공하는 std::array 데이터 구조를 도입했습니다. 기반 유형 사양 및 컴파일 시간 크기 결정. 그러나 다음과 같은 일반적인 질문이 제기됩니다. 명시적인 초기화 없이 std::array를 선언하면 각 요소에 대한 기본 초기화가 발생합니까?
C 언어 사양(§8.5/11)에 따르면 명시적인 초기화 프로그램이 없는 모든 객체는 기본 초기화를 거칩니다. 여기에는 std::array 객체가 포함됩니다. 기본 초기화는 클래스 유형이 아닌 객체를 초기화하지만, 클래스 유형(std::array)의 객체에 대해서는 기본 생성자를 호출합니다.
그러나 cppreference 문서에서는 기본 생성자 "default- 배열의 모든 요소를 구성하거나 복사하여 구성합니다." 이는 std::array가 각 요소에 대해 기본 초기화를 수행하지 않을 수 있음을 의미합니다.
답변:
예, 기본적으로 명시적인 초기화 없이 std::array를 선언합니다. C 11 사양에 따라 모든 요소를 기본적으로 초기화합니다. 이 동작은 크기가 0인 배열과 0이 아닌 배열 모두에 적용됩니다.
값 초기화와 기본 초기화 비교:
값 초기화(8.5/7)에 유의하세요. 기본 초기화와 다릅니다. 값 초기화는 요소에 해당 유형의 기본값을 할당합니다. 기본 유형의 경우 일반적으로 0 또는 false입니다. 값 초기화를 명시적으로 수행하려면 빈 초기화와 함께 중괄호를 사용할 수 있습니다.
<code class="cpp">std::array<int, 13> cxx_style_array{}; // Value-initialize all elements to 0</code>
이는 모든 요소를 int의 기본값인 0으로 명시적으로 설정합니다.
위 내용은 C 11에서는 std::array가 기본적으로 초기화되어 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!