template<class T, size_t Extent = dynamic_extent>
static_extent = 컴파일에 사이즈가 정해짐
dynamic_extent = 런타임에 사이즈가 정해짐
연속된 개체 시퀀스에 대한 간단한 보기를 제공한다.
이는 새로운 객체를 만드는 것이 아니라 기본 제공 배열, std::array, std::vector와 같은 연속된 개체의 참조(refer)를 제공
일반적으로 포인터와 인덱스 등을 사용하여 개체에 액세스 하는 것보다 span을 사용하는것이 더 안전하다.
int arr[] = {1,2,3,4};
const int size = sizeof(arr);
const int len = sizeof(arr)/sizeof(int);
안전성 : std::span은 범위 확인을 제공하고 버퍼 오버플로우를 방지한다. 즉, 일반 C-array나 포인터를 사용하는 것보다는 안전하다. (이게 위에 나오는 길이와 비슷한 맥락이다.)
쉬운 사용성 : std::span은 배열 등 여러 연속적인 메모리 컨테이너를 다루는데 사용하기 편리한 메소드들과 인터페이스를 제공한다.
상호 운용성 : std::span은 여러 연속적인 메모리 컨테이너와 배열과 함께 사용될 수 있다. 그렇기 때문에 여러 STL의 알고리즘들과 함께 사용될 수 있다.
성능 : std::span은 일반 array를 사용하는 것보다 살짝 더 빠르고 안전하게 메모리 블럭을 참조할 수 있게 설계 되어있다.
참고 사이트