초기화 목록 및 std::array: GCC 버그
C 표준 라이브러리의 std::array 클래스는 고정된- 크기 배열 컨테이너. 일반적으로 이 클래스는 초기화 목록을 지원한다고 믿어집니다.
그러나 GCC 4.6.1을 사용하면 다음 구문을 사용하여 std::array 인스턴스를 초기화하려고 시도합니다. 실패:
std::array<:string> strings = { "a", "b" };
std::array<:string> strings({ "a", "b" });
std::Vector로 작동하는 초기화 목록에도 불구하고 std::array의 이 동작으로 인해 C 표준 또는 잠재적인 GCC 문제에 관한 질문입니다.
std::array의 내부 작업
std::array는 본질적으로 배열을 캡슐화하는 구조체입니다. 그 구조는 다음과 같습니다:
template
struct std::array {
T a[size];
};
초기화 목록을 허용하는 생성자가 있는 std::벡터와 달리 std::array에는 이러한 생성자가 없습니다.
집계 초기화
std::array에는 초기화 목록에 대한 명시적인 생성자가 없지만 C 11에서는 집계 유형으로 간주됩니다. 따라서 집계 초기화가 가능합니다. 그러나 구조체 내의 배열을 초기화하려면 추가 중괄호 세트가 필요합니다:
std::array<:string> strings = {{ "a", "b" }};
잠재적인 GCC 버그
C 표준에서는 이러한 초기화에서 추가 중괄호 생략을 허용합니다. 따라서 GCC가 이 구문 없이 이 구문을 처리할 수 없다는 것은 버그일 가능성이 높습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3