gsl 라이브러리에서 span과 array_view의 차이점은 무엇입니까?
최근 여러 회의 프레젠테이션에서 Bjarne Stroustrup과 다른 사람들이 C ++ 및이를 지원하는 일부 유형에 대한 새로운 코딩 지침을 언급하는 것을 들었습니다.
특히, 함수에 대한 매개 변수 대신에 의 예를span<T>
(T* p, int n)
기억 합니다 (대화 시간 약 32:00에). 그러나 나는 또한 사용 제안을 기억합니다 array_view<T>
. 두 가지 대안이지만 동일한 개념입니까? 아니면 내가 혼란스럽고 실제로 관련이 없습니까?
나는 그들이 둘 다에 대해 있어야 할 것에 대한 권위있는 정의를 찾을 수없는 것 같습니다.
우리는 사람들과 이야기 라이브러리 작업 그룹 에 표준위원회 . 그들은 array_view
표준에 들어 가려는 것이 읽기 전용 이기를 원했습니다 . 핵심 지침의 경우 읽고 쓸 수있는 추상화가 필요했습니다. 라이브러리 (GSL)을 지원하는 (잠재적) 표준과 가이드 라인 사이의 충돌을 방지하기 위해, 우리는 (읽기 및 쓰기) 이름 array_view
에 span
: https://github.com/microsoft/gsl .
에서 CppCoreGuidlines 원본은 array_view
이름이 바뀌 었습니다 span
.
참조 : https://github.com/isocpp/CppCoreGuidelines/pull/377
다음과 같이 설명됩니다.
span은 배열에 액세스하기 위해 포인터를 사용하는 것보다 경계가 확인 된 안전한 대안입니다.
문서 P0122R 로부터 (2016년 2월 12일) 도서관 발전 워킹 그룹 (LEWG)는
공식적 유형의 이름을 변경 array_view
하는 방법에 대해span
:
변경 로그
R0에서 변경
- 코나 회의에서 제안 된 유형의 이름을 LEWG의 피드백
array_view
을span
따르는 것으로 변경했습니다 .- [...]
우리는 또한 읽을 수 있습니다 :
표준에 미치는 영향
이 제안은 순수한 라이브러리 확장입니다. 표준 클래스, 함수 또는 헤더를 변경할 필요가 없습니다. P0257
byte
에서 제안 된 유형 앨리어싱 동작 의 유형 및 변경 사항 에 따라 달라질 수 있다면 개선 될 것 입니다.그러나-채택 된 경우-이 새로운 유형에 대해 일부 표준 라이브러리 함수를 오버로드하는 것이 유용 할 수 있습니다 (예 :)
copy()
.
span
표준 C ++ (C ++ 11)로 구현되었으며 C ++ 코드 용 상용 정적 분석 도구와 상용 사무용 생산성 소프트웨어 내에서 성공적으로 사용되고 있습니다. 오픈 소스 참조 구현은 https://github.com/Microsoft/GSL 에서 사용할 수 있습니다 .
다음 장에서이 문서는 읽기 전용 및 읽기-쓰기 ( 변경 가능 ) 액세스를 제공합니다.
요소 유형 및 변환
span
ValueType
추상 클래스 유형이 아닌 완전한 객체 유형이어야하는 템플릿 매개 변수를 통해 요소 유형으로 구성되어야합니다 .span
캡슐화하는 시퀀스에 대한 읽기 전용 또는 변경 가능한 액세스를 지원합니다. 읽기 전용 데이터에 액세스하기 위해 사용자는를 선언 할 수 있으며span<const T>
변경 가능한 데이터에 대한 액세스는span<T>
.[...]
가이드 라인 지원 라이브러리 검토 :span<T>
Marius Bancila (2016 년 3 월) span
에서 다음과 같이 정의하는 내용도 참조하세요 .
가이드 라인 지원 라이브러리 에 설명 종류와 일부 기능의 Microsoft 구현 한 C ++ 핵심 가이드 라인 에 의해 유지 관리 표준 C ++ 재단 . GSL에서 제공하는 유형 중
span<T>
이전에는array_view<T>
.
span<T>
포인터 (및 크기 카운터) 또는 표준 컨테이너 (예 :std::vector
또는std::array
) 대신 사용하도록 권장되는 소유하지 않는 연속 메모리 범위입니다 .
'code' 카테고리의 다른 글
내 콘솔 앱이 C #으로 실행중인 디렉터리를 어떻게 알 수 있습니까? (0) | 2020.09.24 |
---|---|
Android NDK C ++ JNI (네이티브에 대한 구현 없음…) (0) | 2020.09.24 |
HTML5 캔버스에 다각형을 그리는 방법은 무엇입니까? (0) | 2020.09.23 |
Android에서 libGL.so를로드하지 못했습니다. (0) | 2020.09.23 |
C / C ++에서 프로그래밍 방식으로 코어 덤프를 발생시키는 방법 (0) | 2020.09.23 |