>  기사  >  백엔드 개발  >  C 11에서는 std::array가 기본적으로 초기화되어 있나요?

C 11에서는 std::array가 기본적으로 초기화되어 있나요?

Linda Hamilton
Linda Hamilton원래의
2024-10-30 11:47:02915검색

Is std::array Default-Initialized in C  11?

std::array의 기본 초기화

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

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