std::span<T,Extent>:: span
|
constexpr
span
(
)
noexcept
;
|
(1) | (depuis C++20) |
|
template
<
class
It
>
explicit
(
extent
!
=
std::
dynamic_extent
)
|
(2) | (depuis C++20) |
|
template
<
class
It,
class
End
>
explicit
(
extent
!
=
std::
dynamic_extent
)
|
(3) | (depuis C++20) |
|
template
<
std::
size_t
N
>
constexpr span ( std:: type_identity_t < element_type > ( & arr ) [ N ] ) noexcept ; |
(4) | (depuis C++20) |
|
template
<
class
U,
std::
size_t
N
>
constexpr span ( std:: array < U, N > & arr ) noexcept ; |
(5) | (depuis C++20) |
|
template
<
class
U,
std::
size_t
N
>
constexpr span ( const std:: array < U, N > & arr ) noexcept ; |
(6) | (depuis C++20) |
|
template
<
class
R
>
explicit
(
extent
!
=
std::
dynamic_extent
)
|
(7) | (depuis C++20) |
|
explicit
(
extent
!
=
std::
dynamic_extent
)
constexpr span ( std:: initializer_list < value_type > il ) noexcept ; |
(8) | (depuis C++26) |
|
template
<
class
U,
std::
size_t
N
>
explicit
(
extent
!
=
std::
dynamic_extent
&&
N
==
std::
dynamic_extent
)
|
(9) | (depuis C++20) |
|
constexpr
span
(
const
span
&
other
)
noexcept
=
default
;
|
(10) | (depuis C++20) |
Construit un
span
.
Table des matières |
Paramètres
| first | - | itérateur vers le premier élément de la séquence |
| count | - | nombre d'éléments dans la séquence |
| last | - | itérateur après le dernier élément de la séquence ou une autre sentinelle |
| arr | - | tableau pour lequel construire une vue |
| r | - | plage pour laquelle construire une vue |
| source | - |
un autre
span
à convertir
|
| other | - |
un autre
span
à copier
|
Effets
| Surcharge |
data()
après construction
|
size()
après construction
|
|---|---|---|
| ( 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 ( ) |
Contraintes et informations supplémentaires
Exigences de taille
Si
extent
n'est pas
std::
dynamic_extent
et que la taille de la plage source est différente de
extent
, l'objet
span
ne peut pas être construit.
Ces surcharges participent à la résolution de surcharge uniquement si le résultat de l'expression suivante est true :
|
Si le résultat de l'expression suivante est false , le comportement est indéfini. |
(jusqu'à C++26) |
|
Si le résultat de l'expression suivante est false :
|
(depuis C++26) |
Exigences de conversion
Si
element_type
est différent du type d'élément de la plage source, et que ce dernier ne peut pas être converti en le premier par
qualification conversion
, l'objet
span
ne peut pas être construit.
Ces surcharges participent à la résolution de surcharge seulement si
std::
is_convertible_v
<
U
(
*
)
[
]
, element_type
(
*
)
[
]
>
est
true
, où
U
est défini comme suit :
U
Exigences de concept
Si un argument de template ne modélise pas certains concept(s), l'objet
span
ne peut pas être construit.
Ces surcharges participent à la résolution de surcharge uniquement si l'argument de modèle correspondant au paramètre de modèle spécifié satisfait aux concepts correspondants. S'il ne respecte pas les exigences sémantiques d'un concept correspondant, le comportement est indéfini :
| Surcharge |
Paramètre
template |
Concept | Remarque |
|---|---|---|---|
| ( 2 ) |
It
|
contiguous_iterator
|
|
| ( 3 ) |
It
|
contiguous_iterator
|
|
End
|
sized_sentinel_for<It>
|
||
| ( 7 ) |
R
|
contiguous_range
|
|
sized_range
|
|||
borrowed_range
|
requis uniquement si std:: is_const_v < element_type > est false |
Autres contraintes
[
first
,
last
)
n'est pas une plage valide, le comportement est indéfini.
-
std::
remove_cvref_t
<
R
>
n'est pas une spécialisation de
std::spanou std::array . - std:: is_array_v < std:: remove_cvref_t < R >> est false .
Exceptions
Notes
| Macro de test de fonctionnalité | Valeur | Std | Fonctionnalité |
|---|---|---|---|
__cpp_lib_span_initializer_list
|
202311L
|
(C++26) |
Construction de
std::span
à partir d'un
std::initializer_list
,
(
8
)
|
Exemple
#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); // construit à partir d'un tableau std::array a{4, 5, 6}; print_span(a); // construit à partir de std::array std::vector v{7, 8, 9}; print_span(v); // construit à partir de std::vector #if __cpp_lib_span_initializer_list print_span({0, 1, 2}); // construit à partir d'initializer_list #else print_span({{0, 1, 2}}); // idem, une solution de contournement #endif }
Sortie :
1 2 3 4 5 6 7 8 9 0 1 2
Voir aussi
|
accès direct au stockage contigu sous-jacent
(fonction membre publique) |
|
|
retourne le nombre d'éléments
(fonction membre publique) |
|
assigne un
span
(fonction membre publique) |
|
|
(C++17)
(C++20)
|
retourne la taille d'un conteneur ou d'un tableau
(fonction template) |
|
(C++17)
|
obtient le pointeur vers le tableau sous-jacent
(fonction template) |