>  기사  >  백엔드 개발  >  std::array에 값 초기화 기능이 있는 생성자가 없는 이유는 무엇입니까?

std::array에 값 초기화 기능이 있는 생성자가 없는 이유는 무엇입니까?

DDD
DDD원래의
2024-10-23 17:59:03313검색

Why Does std::array Lack a Constructor with Value Initialization?

왜 std::array에는 값 초기화 기능이 있는 생성자가 없나요?

std::array는 고정된 배열을 나타내는 클래스입니다. 크기 배열이지만 모든 요소에 대한 값을 취하는 생성자가 없습니다. 이러한 생성자가 없으면 특히 std::Vector와 같은 동적 컨테이너에 유사한 생성자가 있는 경우 혼란스러워 보일 수 있습니다.

std::array가 집계 유형으로 설계되었으므로 이러한 생략은 의도적인 것입니다. C의 집계는 데이터 멤버로만 구성되고 사용자가 선언한 생성자가 없는 클래스입니다. 따라서 std::array는 중괄호로 묶인 초기화 목록이나 복사/이동 생성을 통해서만 초기화할 수 있습니다.

std::array는 모든 요소에 값을 할당하기 위한 채우기 메서드를 제공하지만 대체 메서드는 아닙니다. 값 초기화가 있는 생성자의 경우. fill 메소드는 이미 구성된 배열에서 작동하여 해당 요소를 초기화하지만 구성 전 메모리 상태에는 영향을 주지 않습니다.

특정 값(-1)으로 std::array의 모든 요소를 ​​초기화해야 하는 경우 예제에서는 기본 구성 다음에 채우기를 사용할 수 있습니다.

<code class="cpp">std::array<int, 10> myArray; // default construction (uninitialized memory)
myArray.fill(-1); // initialize all elements with -1</code>

기본 구성은 집계에 대한 메모리를 0으로 만들지 않으므로 채우기 메서드는 0으로 지정된 값을 덮어쓸 필요 없이 모든 요소를 ​​올바르게 초기화합니다. 이 동작은 사소하게 초기화할 수 없는 유형의 경우 변경될 수 있습니다.

위 내용은 std::array에 값 초기화 기능이 있는 생성자가 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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