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

왜 `std::array`에는 초기화를 위해 이중 중괄호가 필요한 반면 `std::벡터`에는 단일 중괄호만 필요합니까?

Barbara Streisand
풀어 주다: 2024-11-07 07:30:03
원래의
506명이 탐색했습니다.

Why Does `std::array` Require Double Curly Braces for Initialization, While `std::vector` Only Needs Single Curly Braces?

std::Vector 및 std::array의 초기화 목록 동작 차이

C에서 std::Vector 및 std::array의 초기화 목록 동작 std::array는 크게 다릅니다. 다음 코드 조각을 고려하십시오.

std::vector<int> x{1,2,3,4};
std::array<int, 4> y{{1,2,3,4}};
로그인 후 복사

std::array에는 이중 중괄호가 필요한 반면 std::Vector에는 단일 중괄호만 필요한 이유는 무엇입니까?

설명

std::Vector에는 std::initializer_list를 인수로 사용하는 사용자 정의 생성자가 있습니다. 이는 단일 중괄호를 사용하여 직접 목록 초기화를 허용합니다.

반면에 std::array는 사용자 정의 생성자가 없는 집계 유형입니다. 대신 C에서 상속된 기능인 집계 초기화를 사용합니다. 집계 초기화에서는 이중 중괄호를 사용한 초기화가 가능합니다.

중괄호와 = 기호를 사용한 집계 초기화의 이전 구문도 유효합니다.

std::array<int, 4> y = { { 1, 2, 3, 4 } };
로그인 후 복사

그러나 이 구문은 특정 경우에 중괄호 제거를 허용하며 이는 std::array를 사용한 직접 목록 초기화에는 허용되지 않습니다. C 표준(C 11 §8.5.1/11)의 각주에는 "다른 목록 초기화 사용에서는 중괄호를 생략할 수 없습니다."

결함 보고 및 제안된 해결 방법

이 제한 사항을 해결하기 위해 결함 보고서(CWG 결함 #1270)가 제출되었습니다. 제안된 해결 방법이 채택되면 std::array 직접 목록 초기화에 중괄호 제거가 허용되어 다음이 유효해집니다.

std::array<int, 4> y{ 1, 2, 3, 4 };
로그인 후 복사

위 내용은 왜 `std::array`에는 초기화를 위해 이중 중괄호가 필요한 반면 `std::벡터`에는 단일 중괄호만 필요합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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