> 백엔드 개발 > C++ > 본문

`std::벡터`와 `std::array`가 초기화 목록에 대해 다른 구문을 사용하는 이유는 무엇입니까?

Patricia Arquette
풀어 주다: 2024-11-08 12:18:02
원래의
706명이 탐색했습니다.

Why do `std::vector` and `std::array` use different syntax for initializer lists?

std::Vector 및 std::array

초기화 목록을 사용하여 컨테이너를 초기화할 때, std::Vector와 std::array 사이의 구문 차이를 발견했을 수도 있습니다. std::벡터는 단일 중괄호 {}를 사용하여 초기화하는 반면, std::array에는 이중 중괄호 {{}}가 필요합니다. 이러한 구별이 존재하는 이유를 이해하기 위해 우리는 이러한 컨테이너의 기본 속성을 조사합니다.

std::array: Aggregate

std::Vector와 달리, 사용자 정의 생성자가 있는 std::array는 집계 유형으로 간주됩니다. 즉, 초기화 목록을 허용하는 생성자를 포함하여 사용자가 선언한 생성자가 부족하다는 의미입니다. 따라서 std::array의 초기화는 C에서 상속된 C 기능인 집계 초기화에 의존합니다.

C의 집계 초기화>

C에서, 집계 초기화는 두 가지 방법으로 수행할 수 있습니다:

  1. 이전 스타일: =: 구문 활용(예: std::array y = {{1, 2, 3, 4}};
  2. 직접 목록 초기화: 초기화 목록을 직접 전달(예: std::array y{1, 2, 3, 4};

이전 스타일에서는 선언 내에서 초기화할 때 추가 중괄호가 제거될 수 있었습니다. 그러나 이 옵션은 직접 목록 초기화에는 사용할 수 없습니다.

향후 변경

CWG 결함 #1270은 이 제한 사항을 해결하려고 노력하여 다른 항목에서 중괄호 제거를 허용합니다. 목록 초기화 형식. 승인되면 다음 구문이 유효해집니다:

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

이 변경으로 인해 std::Vector와 std::array 사이의 현재 구문 불일치가 제거되어 집계 초기화 방식에 일관성이 제공됩니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!