>백엔드 개발 >C++ >`std::벡터`와 `std::array`에 다른 초기화 구문이 필요한 이유는 무엇입니까?

`std::벡터`와 `std::array`에 다른 초기화 구문이 필요한 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-06 21:09:021095검색

Why Do `std::vector` and `std::array` Require Different Initialization Syntaxes?

std::Vector와 std::Array 초기화 목록의 다양한 동작이 나열되는 이유는 무엇입니까?

두 std::Vector의 개체를 초기화하는 경우 및 C의 std::array 데이터 구조에서는 구문에 눈에 띄는 차이가 발생합니다. std::벡터는 다음과 같이 중괄호로 초기화할 수 있습니다.

std::vector<int> x{1,2,3,4};

그러나 std::arrays의 경우 이중 중괄호가 필요합니다.

std::array<int, 4> y{{1,2,3,4}};

이유 왜냐하면 이러한 불일치는 이러한 데이터 구조의 기본 특성에서 비롯되기 때문입니다. std::arrays는 집합입니다. 사용자 정의 생성자가 없거나 명시적으로 std::initializer_list를 사용하는 객체입니다.

따라서 std::arrays에 대한 중괄호를 사용한 초기화는 에 속합니다. 집계 초기화, C에서 상속됨. 집계 초기화에서는 =:를 사용하는 "이전 스타일"이 사용됩니다.

std::array<int, 4> y = { { 1, 2, 3, 4 } };

이 구문을 사용하면 "형식 선언에서 추가 중괄호를 제거할 수 있습니다. T x = { a };". 그러나 이 규칙은 두 번째 코드 조각에 사용된 것을 포함하여 다른 형태의 목록 초기화로 확장되지 않습니다.

CWG 결함 보고서(#1270)에서는 이러한 제한 사항을 강조합니다. 제안된 해결 방법이 수락되면 중괄호 제거가 확장되어 다른 목록 초기화 형식을 포함하게 되며 잠재적으로 다음과 같은 구문이 유효한 구문이 됩니다.

std::array<int, 4> y{ 1, 2, 3, 4 };

위 내용은 `std::벡터`와 `std::array`에 다른 초기화 구문이 필요한 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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