std::ranges:: data
|
Défini dans l'en-tête
<ranges>
|
||
|
Défini dans l'en-tête
<iterator>
|
||
|
inline
namespace
/* non spécifié */
{
inline
constexpr
/* non spécifié */
data
=
/* non spécifié */
;
|
(depuis C++20)
(objet de point de personnalisation) |
|
|
Signature d'appel
|
||
|
template
<
class
T
>
requires
/* voir ci-dessous */
|
(depuis C++20) | |
Retourne un pointeur vers le premier élément d'une plage contiguë.
Si
T
est un type tableau et que
std::
remove_all_extents_t
<
std::
remove_reference_t
<
T
>>
est incomplet, alors l'appel à
ranges::data
est mal formé, aucun diagnostic requis.
Si l'argument est une lvalue ou si
ranges::
enable_borrowed_range
<
std::
remove_cv_t
<
T
>>
est
true
, un appel à
ranges::data
est
expression-équivalent
à :
- decay-copy ( t. data ( ) ) (jusqu'à C++23) auto ( t. data ( ) ) (depuis C++23) , si cette expression est valide et que son type est un pointeur vers un type d'objet.
- Sinon, std:: to_address ( ranges:: begin ( t ) ) , si l'expression ranges:: begin ( t ) est valide et que son type modélise std::contiguous_iterator .
Dans tous les autres cas, un appel à
ranges::data
est mal formé, ce qui peut entraîner un
échec de substitution
lorsque
ranges
::
data
(
e
)
apparaît dans le contexte immédiat d'une instanciation de modèle.
Table des matières |
Objets de point de personnalisation
Le nom
ranges::data
désigne un
objet de point de personnalisation
, qui est un
objet fonction
const d'un type de classe
littéral
semiregular
. Voir
CustomizationPointObject
pour plus de détails.
Notes
Si l'argument est une rvalue (c'est-à-dire que
T
est un type objet) et que
ranges::
enable_borrowed_range
<
std::
remove_cv_t
<
T
>>
est
false
, l'appel à
ranges::data
est mal formé, ce qui entraîne également un échec de substitution.
Si ranges :: data ( e ) est valide pour une expression e , alors il renvoie un pointeur vers un objet.
La norme C++20 exige que si l'appel de fonction sous-jacent
data
retourne une prvalue, la valeur de retour soit construite par déplacement à partir de l'objet temporaire matérialisé. Toutes les implémentations retournent directement la prvalue à la place. L'exigence est corrigée par la proposition post-C++20
P0849R8
pour correspondre aux implémentations.
Exemple
#include <cstring> #include <iostream> #include <ranges> #include <string> int main() { std::string s{"Hello world!\n"}; char a[20]; // stockage pour une chaîne de style C std::strcpy(a, std::ranges::data(s)); // [data(s), data(s) + size(s)] est garanti d'être un NTBS std::cout << a; }
Sortie :
Hello world!
Voir aussi
|
(C++20)
|
obtient un pointeur vers le début d'une plage contiguë en lecture seule
(objet de point de personnalisation) |
|
(C++20)
|
retourne un itérateur vers le début d'une plage
(objet de point de personnalisation) |
|
(C++17)
|
obtient le pointeur vers le tableau sous-jacent
(modèle de fonction) |