std::array의 크기는 표준에 의해 강제됩니까?
C 11에서 std::array는 연속성을 보장합니다. 일반 어레이를 능가하거나 그와 동등한 성능을 제공합니다. 그러나 질문은 남아 있습니다. 표준이 std::array의 크기와 메모리 레이아웃을 명시적으로 정의합니까?
표준 요구 사항 탐색
표준은 std::를 정의합니다. 다음 구문을 사용하여 초기화할 수 있는 집계로서의 배열:
std::array<T, N> a = { initializer-list };
집계로서 std::array는 다음을 수행할 수 없습니다. 생성자를 사용하여 초기화 목록의 데이터를 변환합니다. 이는 배열이 주로 값 자체를 저장한다는 것을 의미합니다.
예상 동작에서 가능한 편차
기술적으로 표준은 특정 잠재적 편차를 금지하지 않습니다.
컴파일러 변형
표준의 모호함에도 불구하고 GNU 및 Intel과 같은 주요 컴파일러의 실제 사용에 따르면 std::array의 크기와 메모리 레이아웃은 일반 배열의 크기와 메모리 레이아웃을 반영합니다.
std::vector< std::array<int, N> > x(M); typedef int (*ArrayPointer)[N]; ArrayPointer y = (ArrayPointer) &x[0][0]; // Safe multidimensional array-like usage
이 코드는 예상대로 작동하지만 모든 구현이 이 패턴을 따른다는 보장은 없습니다. 따라서 업무상 중요한 코드에서는 이 동작에 의존하는 것이 바람직하지 않습니다.
위 내용은 C 표준은 `std::array`의 크기와 메모리 레이아웃을 보장합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!