728x90

1. std::span 정의

  • 연속 객체 순차열을 참조하는 객체.
  • C 배열, 포인터와 크기, std::array, std::vector, std::string 등 을 연속 객체라 부른다.
  • 크기가 컴파일 시점에 알려지며, 해당 형식 자체에 크기 정보가 포함되었으면 정적 길이를 가진다고 부른다.
  • 크기가 실행 시점에 결정되면 동적 길이를 가진다고 부른다.

 

2. std::span 선언

template <class _Ty, size_t _Extent = dynamic_extent>
class span : private _Span_extent_type<_Ty, _Extent> {
private:
    using _Mybase = _Span_extent_type<_Ty, _Extent>;
    ...
    ...
  • std::span 정의를 확인해보면 타입 형식과 사이즈를 받고 있다.

 

3. std::span 사용 방법

    // 크기가 실행 시점에 정해지므로, 동적 길이를 가진 std::span
    std::vector < int > v1 = { 1, 2, 3, 4, 5, 6 };
    std::span< int > dynamicSpan( v1 );

    // 컴파일 시점에 크기가 6으로 정해지므로, 정적 길이를 가진 std::span
    std::vector < int > v2 = { 1, 2, 3, 4, 5, 6 };
    std::span< int, 6 > staticSpan( v2 );

    // 포인터와 크기로 생성
    std::vector < int > v3 = { 1, 2, 3, 4, 5, 6 };
    std::span pointerSpan( v3.data(), v3.size() );

 

4. std::span 도입 배경

void printArr( std::span< int > InArr )
{
    // std::span을 사용하게 되어 배열 크기를 확인할 수 있게되었다.
    std::cout << InArr.size() << std::endl;
    for ( auto num : InArr )
        std::cout << num << std::endl;
}

int main()
{
    // C 배열 ( 연속 객체 )
    int arr[] = { 1, 2, 3, 4 };
    printArr( arr );

    // 연속 객체
    std::vector< int > arr1 = { 1, 2, 3, 4 };
    printArr( arr1 );
}
  • C 배열을 함수로 전달하면, 크기 정보가 없는 포인터로 변하게 되므로 잦은 오류를 발생하게 되어 도입되었다.

 

반응형

+ Recent posts