std::span<T,Extent>:: span
|
constexpr
span
(
)
noexcept
;
|
(1) | (seit C++20) |
|
template
<
class
It
>
explicit
(
Ausmaß
!
=
std::
dynamic_extent
)
|
(2) | (seit C++20) |
|
template
<
class
It,
class
End
>
explicit
(
extent
!
=
std::
dynamic_extent
)
|
(3) | (seit C++20) |
|
template
<
std::
size_t
N
>
constexpr span ( std:: type_identity_t < element_type > ( & arr ) [ N ] ) noexcept ; |
(4) | (seit C++20) |
|
template
<
class
U,
std::
size_t
N
>
constexpr span ( std:: array < U, N > & arr ) noexcept ; |
(5) | (seit C++20) |
|
template
<
class
U,
std::
size_t
N
>
constexpr span ( const std:: array < U, N > & arr ) noexcept ; |
(6) | (seit C++20) |
|
template
<
class
R
>
explicit
(
extent
!
=
std::
dynamic_extent
)
|
(7) | (seit C++20) |
|
explicit
(
extent
!
=
std::
dynamic_extent
)
constexpr span ( std:: initializer_list < value_type > il ) noexcept ; |
(8) | (seit C++26) |
|
template
<
class
U,
std::
size_t
N
>
explicit
(
extent
!
=
std::
dynamic_extent
&&
N
==
std::
dynamic_extent
)
|
(9) | (seit C++20) |
|
constexpr
span
(
const
span
&
other
)
noexcept
=
default
;
|
(10) | (seit C++20) |
Konstruiert einen
span
.
Inhaltsverzeichnis |
Parameter
| first | - | Iterator zum ersten Element der Sequenz |
| count | - | Anzahl der Elemente in der Sequenz |
| last | - | Iterator hinter dem letzten Element der Sequenz oder ein anderes Sentinel |
| arr | - | Array, für das eine Ansicht erstellt werden soll |
| r | - | Bereich, für den eine Ansicht erstellt werden soll |
| source | - |
Ein anderer
span
, von dem konvertiert werden soll
|
| other | - |
Ein anderer
span
, von dem kopiert werden soll
|
Effekte
| Überladung |
data()
nach Konstruktion
|
size()
nach Konstruktion
|
|---|---|---|
| ( 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 ( ) |
Einschränkungen und ergänzende Informationen
Größenanforderungen
Wenn
extent
nicht
std::
dynamic_extent
ist und die Größe des Quellbereichs sich von
extent
unterscheidet, kann das
span
-Objekt nicht konstruiert werden.
Diese Überladungen nehmen nur dann an der Überladungsauflösung teil, wenn das Ergebnis des folgenden Ausdrucks true ist:
|
Wenn das Ergebnis des folgenden Ausdrucks false ist, ist das Verhalten undefiniert. |
(bis C++26) |
|
Wenn das Ergebnis des folgenden Ausdrucks false ist:
|
(seit C++26) |
Konvertierungsanforderungen
Wenn
element_type
sich vom Elementtyp des Quellbereichs unterscheidet und letzterer nicht durch
Qualifikationskonvertierung
in ersteren umgewandelt werden kann, kann das
span
-Objekt nicht konstruiert werden.
Diese Überladungen nehmen nur dann an der Überladungsauflösung teil, wenn
std::
is_convertible_v
<
U
(
*
)
[
]
, element_type
(
*
)
[
]
>
gleich
true
ist, wobei
U
wie folgt definiert ist:
U
Konzeptanforderungen
Wenn irgendein Template-Argument bestimmte Konzept(e) nicht modelliert, kann das
span
-Objekt nicht konstruiert werden.
Diese Überladungen nehmen nur dann an der Überladungsauflösung teil, wenn das dem angegebenen Template-Parameter entsprechende Template-Argument die entsprechenden Konzepte erfüllt. Wenn es die semantischen Anforderungen eines entsprechenden Konzepts nicht erfüllt, ist das Verhalten undefiniert:
| Überladung |
Template-
parameter |
Konzept | Bemerkung |
|---|---|---|---|
| ( 2 ) |
It
|
contiguous_iterator
|
|
| ( 3 ) |
It
|
contiguous_iterator
|
|
End
|
sized_sentinel_for<It>
|
||
| ( 7 ) |
R
|
contiguous_range
|
|
sized_range
|
|||
borrowed_range
|
nur erforderlich, wenn std:: is_const_v < element_type > gleich false ist |
Weitere Einschränkungen
[
first
,
last
)
kein gültiger Bereich ist, ist das Verhalten undefiniert.
-
std::
remove_cvref_t
<
R
>
ist keine Spezialisierung von
std::spanoder std::array . - std:: is_array_v < std:: remove_cvref_t < R >> ist false .
Exceptions
Hinweise
| Feature-Test Makro | Wert | Std | Funktion |
|---|---|---|---|
__cpp_lib_span_initializer_list
|
202311L
|
(C++26) |
Konstruktion von
std::span
aus einem
std::initializer_list
,
(
8
)
|
Beispiel
#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); // Konstruktion aus Array std::array a{4, 5, 6}; print_span(a); // Konstruktion aus std::array std::vector v{7, 8, 9}; print_span(v); // Konstruktion aus std::vector #if __cpp_lib_span_initializer_list print_span({0, 1, 2}); // Konstruktion aus initializer_list #else print_span({{0, 1, 2}}); // dito, eine Problemumgehung #endif }
Ausgabe:
1 2 3 4 5 6 7 8 9 0 1 2
Siehe auch
|
direkter Zugriff auf den zugrundeliegenden zusammenhängenden Speicher
(öffentliche Elementfunktion) |
|
|
gibt die Anzahl der Elemente zurück
(öffentliche Elementfunktion) |
|
weist einen
span
zu
(öffentliche Elementfunktion) |
|
|
(C++17)
(C++20)
|
gibt die Größe eines Containers oder Arrays zurück
(Funktions-Template) |
|
(C++17)
|
erhält den Zeiger auf das zugrundeliegende Array
(Funktions-Template) |