C 표준은 std::array의 크기를 정의합니까?
C 11에서 std::array는 성능이 비슷한 연속 스토리지를 제공합니다. 일반 배열로. 그러나 std::array의 크기와 메모리 레이아웃이 일반 배열과 동일한지는 확실하지 않습니다.
표준 요구 사항
C 표준(§23.3.2.1/2) 다음을 통해 초기화된 집계로 배열을 정의합니다.
array<T, N> a = { initializer-list };
집계로서, std::array는 생성자를 사용하여 초기화 목록의 데이터를 변환할 수 없습니다. 이는 주로 실제 데이터 값을 저장한다는 것을 의미합니다.
잠재적인 구현 관련 동작
기술적으로 std::array는 보조 데이터를 포함하거나 포함하지 않을 수 있습니다. -일반적인 배열의 동작에서 벗어나는 표준 정렬.
예를 들어, 컴파일러는 다음을 추가할 수 있습니다. 범위를 벗어난 쓰기 시도를 감지하기 위한 std::array 끝에 센티넬 값. 또는 수퍼 정렬(예: Intel SSE 명령어)은 std::array에서 지원되지만 내장 배열에서는 지원되지 않을 수 있습니다.
예상되는 동작
일반적으로 다음 코드는 의도한 대로 작동할 것으로 예상할 수 있습니다.
std::vector< std::array<int, N> > x(M); typedef int (*ArrayPointer)[N]; ArrayPointer y = (ArrayPointer) &x[0][0]; // Use y as a multidimensional array
대부분의 컴파일러 (예: GNU 및 Intel)은 이 동작을 준수합니다. 그러나 표준은 std::array 및 일반 배열에 대해 동일한 메모리 레이아웃을 명시적으로 보장하지 않는다는 점에 유의하는 것이 중요합니다.
위 내용은 C 표준은 `std::array`에 대해 내장 배열과 동일한 크기 및 메모리 레이아웃을 보장합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!