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 배열을 함수로 전달하면, 크기 정보가 없는 포인터로 변하게 되므로 잦은 오류를 발생하게 되어 도입되었다.
반응형
'C++ > C++ 20' 카테고리의 다른 글
[C++ 20] std::source_location을 이용한 로그 작성 (0) | 2022.02.26 |
---|---|
[C++ 20] std::erase_if 를 이용한 요소 삭제 (0) | 2022.02.25 |
[C++ 20] 템플릿 람다 (0) | 2022.02.23 |
[C++ 20] consteval, constinit 지정자 (0) | 2022.02.23 |
[C++20] 지명 초기화 (0) | 2022.02.22 |