code

gsl 라이브러리에서 span과 array_view의 차이점은 무엇입니까?

codestyles 2020. 9. 23. 07:40
반응형

gsl 라이브러리에서 span과 array_view의 차이점은 무엇입니까?


최근 여러 회의 프레젠테이션에서 Bjarne Stroustrup과 다른 사람들이 C ++ 및이를 지원하는 일부 유형에 대한 새로운 코딩 지침을 언급하는 것을 들었습니다.

특히, 함수에 대한 매개 변수 대신에 의 예를span<T>(T* p, int n) 기억 합니다 (대화 시간 약 32:00에). 그러나 나는 또한 사용 제안을 기억합니다 array_view<T>. 두 가지 대안이지만 동일한 개념입니까? 아니면 내가 혼란스럽고 실제로 관련이 없습니까?

나는 그들이 둘 다에 대해 있어야 할 것에 대한 권위있는 정의를 찾을 수없는 것 같습니다.


우리는 사람들과 이야기 라이브러리 작업 그룹표준위원회 . 그들은 array_view표준에 들어 가려는 것이 읽기 전용 이기를 원했습니다 . 핵심 지침의 경우 읽고 쓸 수있는 추상화가 필요했습니다. 라이브러리 (GSL)을 지원하는 (잠재적) 표준과 가이드 라인 사이의 충돌을 방지하기 위해, 우리는 (읽기 및 쓰기) 이름 array_viewspan: 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_viewspan따르는 것으로 변경했습니다 .
  • [...]

우리는 또한 읽을 수 있습니다 :

표준에 미치는 영향

이 제안은 순수한 라이브러리 확장입니다. 표준 클래스, 함수 또는 헤더를 변경할 필요가 없습니다. P0257byte 에서 제안 된 유형 앨리어싱 동작 유형 및 변경 사항 에 따라 달라질 수 있다면 개선 될 것 입니다.

그러나-채택 된 경우-이 새로운 유형에 대해 일부 표준 라이브러리 함수를 오버로드하는 것이 유용 할 수 있습니다 (예 :) copy().

span표준 C ++ (C ++ 11)로 구현되었으며 C ++ 코드 용 상용 정적 분석 도구와 상용 사무용 생산성 소프트웨어 내에서 성공적으로 사용되고 있습니다. 오픈 소스 참조 구현은 https://github.com/Microsoft/GSL 에서 사용할 수 있습니다 .

다음 장에서이 문서는 읽기 전용읽기-쓰기 ( 변경 가능 ) 액세스를 제공합니다.

요소 유형 및 변환

spanValueType추상 클래스 유형이 아닌 완전한 객체 유형이어야하는 템플릿 매개 변수를 통해 요소 유형으로 구성되어야합니다 . 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) 대신 사용하도록 권장되는 소유하지 않는 연속 메모리 범위입니다 .

참고 URL : https://stackoverflow.com/questions/34832090/whats-the-difference-between-span-and-array-view-in-the-gsl-library

반응형