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 중국어 웹사이트의 기타 관련 기사를 참조하세요!