초기화 목록 및 std::array: GCC 버그
C 표준 라이브러리의 std::array 클래스는 고정된 크기 배열 컨테이너. 일반적으로 이 클래스는 초기화 목록을 지원한다고 믿어집니다.
그러나 GCC 4.6.1을 사용하면 다음 구문을 사용하여 std::array 인스턴스를 초기화하려는 시도가 실패합니다.
<code class="cpp">std::array<std::string, 2> strings = { "a", "b" }; std::array<std::string, 2> strings({ "a", "b" });</code>
초기화 목록에도 불구하고 std::Vector로 작업할 때 std::array의 이러한 동작은 C 표준이나 잠재적인 GCC 문제에 대한 의문을 제기했습니다.
std::array의 내부 작업
std::array는 기본적으로 배열을 캡슐화하는 구조체입니다. 구조는 다음과 같습니다.
<code class="cpp">template<typename T, int size> struct std::array { T a[size]; };</code>
초기화 목록을 허용하는 생성자가 있는 std::Vector와 달리 std::array에는 이러한 생성자가 없습니다.
집계 초기화
std::array에는 초기화 목록에 대한 명시적인 생성자가 없지만 C 11에서는 집계 유형으로 간주됩니다. 따라서 집계 초기화가 가능합니다. 그러나 구조체 내의 배열을 초기화하려면 추가 중괄호 세트가 필요합니다.
<code class="cpp">std::array<std::string, 2> strings = {{ "a", "b" }};</code>
잠재적 GCC 버그
C 표준에서는 다음을 생략할 수 있습니다. 그러한 초기화에서 추가 중괄호. 따라서 GCC가 이 구문 없이 이 구문을 처리할 수 없다는 것은 버그일 가능성이 높습니다.
위 내용은 GCC가 초기화 목록을 사용하여 std::array를 초기화하지 못하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!