std::span<T,Extent>:: span
|
constexpr
span
(
)
noexcept
;
|
(1) | (C++20 이후) |
|
template
<
class
It
>
explicit
(
extent
!
=
std::
dynamic_extent
)
|
(2) | (C++20부터) |
|
template
<
class
It,
class
End
>
explicit
(
extent
!
=
std::
dynamic_extent
)
|
(3) | (C++20 이후) |
|
template
<
std::
size_t
N
>
constexpr span ( std:: type_identity_t < element_type > ( & arr ) [ N ] ) noexcept ; |
(4) | (C++20부터) |
|
template
<
class
U,
std::
size_t
N
>
constexpr span ( std:: array < U, N > & arr ) noexcept ; |
(5) | (C++20부터) |
|
template
<
class
U,
std::
size_t
N
>
constexpr span ( const std:: array < U, N > & arr ) noexcept ; |
(6) | (C++20부터) |
|
template
<
class
R
>
explicit
(
extent
!
=
std::
dynamic_extent
)
|
(7) | (C++20 이후) |
|
explicit
(
extent
!
=
std::
dynamic_extent
)
constexpr span ( std:: initializer_list < value_type > il ) noexcept ; |
(8) | (C++26부터) |
|
template
<
class
U,
std::
size_t
N
>
explicit
(
extent
!
=
std::
dynamic_extent
&&
N
==
std::
dynamic_extent
)
|
(9) | (C++20 이후) |
|
constexpr
span
(
const
span
&
other
)
noexcept
=
default
;
|
(10) | (C++20부터) |
span
을 생성합니다.
목차 |
매개변수
| first | - | 시퀀스의 첫 번째 요소에 대한 반복자 |
| count | - | 시퀀스의 요소 개수 |
| last | - | 시퀀스의 마지막 요소 다음 반복자 또는 다른 센티널 |
| arr | - | 뷰를 생성할 배열 |
| r | - | 뷰를 생성할 범위 |
| source | - |
변환할 다른
span
|
| other | - |
복사할 다른
span
|
효과
| 오버로드 |
data()
생성 후
|
size()
생성 후
|
|---|---|---|
| ( 1 ) | nullptr | 0 |
| ( 2 ) | std:: to_address ( first ) | count |
| ( 3 ) | last - first | |
| ( 4 ) | std:: data ( arr ) | N |
| ( 5 ) | ||
| ( 6 ) | ||
| ( 7 ) | ranges:: data ( r ) | ranges:: size ( r ) |
| ( 8 ) | il. begin ( ) | il. size ( ) |
| ( 9 ) | source. data ( ) | source. size ( ) |
| ( 10 ) | other. data ( ) | other. size ( ) |
제약 조건 및 보충 정보
크기 요구사항
만약
extent
가
std::
dynamic_extent
가 아니고 소스 범위의 크기가
extent
와 다르다면,
span
객체는 생성될 수 없습니다.
다음 오버로드는 다음 표현식의 결과가 true 인 경우에만 오버로드 해결에 참여합니다:
|
다음 표현식의 결과가 false 인 경우, 동작은 정의되지 않습니다. |
(C++26까지) |
|
다음 표현식의 결과가 false 인 경우:
|
(C++26부터) |
변환 요구사항
만약
element_type
이 소스 범위의 요소 타입과 다르고, 후자가
qualification conversion
에 의해 전자로 변환될 수 없는 경우,
span
객체는 생성될 수 없습니다.
이러한 오버로드는 다음 조건에서만 오버로드 해결에 참여합니다:
std::
is_convertible_v
<
U
(
*
)
[
]
, element_type
(
*
)
[
]
>
가
true
인 경우이며, 여기서
U
는 다음과 같이 정의됩니다:
U
개념 요구사항
템플릿 인수가 특정 개념(concept)을 모델링하지 않을 경우,
span
객체를 생성할 수 없습니다.
이러한 오버로드는 지정된 템플릿 매개변수에 해당하는 템플릿 인자가 해당 개념(들)을 만족하는 경우에만 오버로드 해결에 참여합니다. 해당하는 개념들의 의미론적 요구사항을 충족하지 않을 경우, 동작은 정의되지 않습니다:
| 오버로드 |
템플릿
매개변수 |
컨셉 | 비고 |
|---|---|---|---|
| ( 2 ) |
It
|
contiguous_iterator
|
|
| ( 3 ) |
It
|
contiguous_iterator
|
|
End
|
sized_sentinel_for<It>
|
||
| ( 7 ) |
R
|
contiguous_range
|
|
sized_range
|
|||
borrowed_range
|
다음 경우에만 필요함 std:: is_const_v < element_type > 가 false 인 경우 |
기타 제약 조건
[
first
,
last
)
가 유효한 범위가 아닌 경우, 동작은 정의되지 않습니다.
-
std::
remove_cvref_t
<
R
>
가
std::span또는 std::array 의 특수화가 아닌 경우. - std:: is_array_v < std:: remove_cvref_t < R >> 가 false 인 경우.
예외
참고 사항
| 기능 테스트 매크로 | 값 | 표준 | 기능 |
|---|---|---|---|
__cpp_lib_span_initializer_list
|
202311L
|
(C++26) |
std::span
생성
std::initializer_list
에서,
(
8
)
|
예제
#include <array> #include <iostream> #include <span> #include <vector> void print_span(std::span<const int> s) { for (int n : s) std::cout << n << ' '; std::cout << '\n'; } int main() { int c[]{1, 2, 3}; print_span(c); // 배열로부터 생성 std::array a{4, 5, 6}; print_span(a); // std::array로부터 생성 std::vector v{7, 8, 9}; print_span(v); // std::vector로부터 생성 #if __cpp_lib_span_initializer_list print_span({0, 1, 2}); // initializer_list로부터 생성 #else print_span({{0, 1, 2}}); // 동일하게, 우회 방법 #endif }
출력:
1 2 3 4 5 6 7 8 9 0 1 2
참고 항목
|
기본 연속 저장소에 대한 직접 접근
(public member function) |
|
|
요소의 개수를 반환
(public member function) |
|
span
을 할당
(public member function) |
|
|
(C++17)
(C++20)
|
컨테이너나 배열의 크기를 반환
(function template) |
|
(C++17)
|
기본 배열에 대한 포인터를 얻음
(function template) |