C 컨테이너에 초기화 목록을 사용할 때 std::벡터와 std::array 사이에 당황스러운 차이가 발생합니다. 표준::배열. 이 동작의 이유를 살펴보겠습니다.
문제:
다음 코드를 고려하세요.
std::vector<int> x{1,2,3,4}; std::array<int, 4> y{{1,2,3,4}};
이중 곱슬을 사용해야 하는 이유는 무엇입니까? std::array에는 중괄호가 있지만 std::Vector에는 중괄호가 없나요?
답변:
이 동작은 std::array
std::array<int, 4> y = { { 1, 2, 3, 4 } };
이 이전 스타일에서는 추가 중괄호가 생략되어 동일한 코드가 생성될 수 있습니다.
std::array<int, 4> y = { 1, 2, 3, 4 };
그러나 이 중괄호 제거는 = 구문과 함께 이전 스타일 초기화를 사용하는 경우에만 허용됩니다. = 구문을 사용하지 않는 직접 목록 초기화에서는 중괄호 제거가 허용되지 않습니다. 이 제한 사항은 C 11 §8.5.1/11에 따릅니다.
제안된 해결 방법:
이 문제를 해결하기 위해 결함 보고서(CWG 결함 #1270)가 제기되었습니다. 한정. 제안된 해결 방법이 채택되면 다음을 포함하여 모든 형태의 목록 초기화에 중괄호 제거가 허용됩니다.
std::array<int, 4> y{ 1, 2, 3, 4 };
이 변경으로 std::Vector 및 std::array의 동작에 일관성이 제공됩니다. 초기화 목록을 사용할 때
위 내용은 std::array에는 초기화 목록에 이중 중괄호가 필요한 반면 std::Vector에는 필요하지 않은 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!