>백엔드 개발 >C++ >`std::array`에 초기화 목록에 이중 중괄호가 필요한 이유는 무엇입니까?

`std::array`에 초기화 목록에 이중 중괄호가 필요한 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-08 05:07:01487검색

Why Does `std::array` Require Double Curly Braces in Initializer Lists?

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

std::Vector 및 std::array는 C의 두 컨테이너 모두 초기화 목록의 동작이 다릅니다. 이 기사에서는 집계 초기화의 복잡성을 살펴보고 std::array에 이중 중괄호가 필요한 이유를 이해합니다.

std::Vector 및 std::를 초기화하는 다음 코드 조각을 고려해 보세요. 배열:

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

std::벡터 초기화

std::Vector는 std::initializer_list를 허용하는 생성자를 포함하여 사용자 정의 생성자를 지원합니다. 따라서 추가 중괄호 없이도 중괄호를 사용하여 x를 직접 초기화할 수 있습니다.

std::array 초기화

std::Vector, std::array와는 달리 사용자 정의 생성자가 없는 집계입니다. 대신 C에서 상속된 기능인 집계 초기화에 의존합니다.

"이전 스타일" 집계 초기화에서는 등호와 콜론이 사용됩니다.

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

그러나 직접 사용하는 경우 목록 초기화(C 11에 도입됨), this = 구문은 더 이상 유효하지 않습니다. 또한 추가 중괄호를 생략할 수 있는 중괄호 제거는 이전 style = 구문을 사용하는 선언에서만 허용됩니다. 직접 목록 초기화의 경우 추가 중괄호가 필수입니다.

CWG 결함

CWG 결함 보고서(CWG 결함 #1270)는 중괄호 제거를 허용하여 이 제한을 해결하는 것을 목표로 합니다. 다른 형태의 목록 초기화. 채택되면 다음 코드는 올바른 형식이 됩니다.

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

결론적으로 초기화 목록이 있는 std::Vector와 std::array의 동작 차이는 클래스로서의 기본 특성에서 비롯됩니다. 사용자 정의 생성자와 집계 초기화에 의존하는 집계입니다. std::array가 집계 초기화 규칙을 따르려면 이중 중괄호가 필요하며, std::벡터에서는 이전 스타일 집계 초기화 구문에 의존하지 않고 단일 중괄호 세트를 사용하여 직접 초기화할 수 있습니다.

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

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