fonctions<utility>
as_const
template <class T> constexpr add_const_t<T>& as_const(T& t) noexcept;
template <class T> void as_const(const T&&) = delete;
Valeur de retour
Retourne T
.
declval
template <class T> add_rvalue_reference_t<T> declval() noexcept; // as unevaluated operand
exchange
(C++14)
Affecte une nouvelle valeur à un objet et retourne son ancienne valeur.
template <class T, class Other = T>
T exchange(T& val, Other&& new_val)
Paramètres
val
Objet qui recevra la valeur de new_val
.
new_val
Objet dont la valeur est copiée ou déplacée vers val
.
Notes
Pour les types complexes, exchange
évite de copier l’ancienne valeur lorsqu’un constructeur de déplacement est disponible, évite de copier la nouvelle valeur s’il s’agit d’un objet temporaire ou est déplacé, et accepte n’importe quel type comme nouvelle valeur, à l’aide d’un opérateur d’affectation de conversion disponible. La fonction d’échange est différente de celle de std::swap
l’argument gauche qui n’est pas déplacée ou copiée vers l’argument de droite.
Exemple
L'exemple suivant montre comment utiliser exchange
. En réalité, exchange
est particulièrement utile avec les objets volumineux qui sont coûteux à copier :
#include <utility>
#include <iostream>
using namespace std;
struct C
{
int i;
//...
};
int main()
{
// Use brace initialization
C c1{ 1 };
C c2{ 2 };
C result = exchange(c1, c2);
cout << "The old value of c1 is: " << result.i << endl;
cout << "The new value of c1 after exchange is: " << c1.i << endl;
return 0;
}
The old value of c1 is: 1
The new value of c1 after exchange is: 2
forward
Convertit de manière conditionnelle son argument en une référence rvalue, si l’argument est une rvalue ou une référence rvalue. Cette opération restaure la nature rvalue d’un argument pour le transfert parfait.
template <class Type> // accepts lvalues
constexpr Type&& forward(typename remove_reference<Type>::type& Arg) noexcept
template <class Type> // accepts everything else
constexpr Type&& forward(typename remove_reference<Type>::type&& Arg) noexcept
Paramètres
Type
Type de la valeur passée dans Arg
, qui peut être différent du type de Arg
. Généralement déterminé par un argument template de la fonction de transfert.
Arg
Argument sur lequel effectuer un cast.
Valeur de retour
Retourne une référence rvalue à Arg
si la valeur passée dans Arg
était à l'origine une rvalue ou une référence rvalue ; sinon, retourne Arg
sans modifier son type.
Notes
Vous devez spécifier un argument template explicite pour appeler forward
.
forward
ne transfère pas son argument. En revanche, en convertissant son argument de manière conditionnelle en une référence rvalue, s'il s'agissait à l'origine d'une rvalue ou d'une référence rvalue, forward
permet au compilateur d'effectuer une résolution de surcharge en connaissant le type d'origine de l'argument transféré. Le type apparent d’un argument à une fonction de transfert peut être différent de son type d’origine, par exemple lorsqu’une rvalue est utilisée comme argument pour une fonction et est liée à un nom de paramètre ; avoir un nom le rend lvalue, avec la valeur qui existe réellement en tant que rvalue, forward
restaure la rvalue-ness de l’argument.
La restauration de la valeur d’origine d’un argument pour effectuer une résolution de surcharge est appelée transfert parfait. Le transfert parfait permet à une fonction de modèle d’accepter un argument de n’importe quel type référence et de restaurer sa nature rvalue si nécessaire, pour une résolution de surcharge appropriée. Le transfert parfait permet de préserver la sémantique de déplacement des rvalue et évite d’avoir à fournir des surcharges pour les fonctions qui varient uniquement par le type référence de leurs arguments.
from_chars
from_chars_result from_chars(const char* first, const char* last, see below& value, int base = 10);
from_chars_result from_chars(const char* first, const char* last, float& value, chars_format fmt = chars_format::general);
from_chars_result from_chars(const char* first, const char* last, double& value, chars_format fmt = chars_format::general);
from_chars_result from_chars(const char* first, const char* last, long double& value, chars_format fmt = chars_format::general);
get
Obtient un élément d’un objet pair
, par position d’index ou par type.
// get reference to element at Index in pair Pr
template <size_t Index, class T1, class T2>
constexpr tuple_element_t<Index, pair<T1, T2>>&
get(pair<T1, T2>& Pr) noexcept;
// get reference to element T1 in pair Pr
template <class T1, class T2>
constexpr T1& get(pair<T1, T2>& Pr) noexcept;
// get reference to element T2 in pair Pr
template <class T2, class T1>
constexpr T2& get(pair<T1, T2>& Pr) noexcept;
// get const reference to element at Index in pair Pr
template <size_t Index, class T1, class T2>
constexpr const tuple_element_t<Index, pair<T1, T2>>&
get(const pair<T1, T2>& Pr) noexcept;
// get const reference to element T1 in pair Pr
template <class T1, class T2>
constexpr const T1& get(const pair<T1, T2>& Pr) noexcept;
// get const reference to element T2 in pair Pr
template <class T2, class T1>
constexpr const T2& get(const pair<T1, T2>& Pr) noexcept;
// get rvalue reference to element at Index in pair Pr
template <size_t Index, class T1, class T2>
constexpr tuple_element_t<Index, pair<T1, T2>>&&
get(pair<T1, T2>&& Pr) noexcept;
// get rvalue reference to element T1 in pair Pr
template <class T1, class T2>
constexpr T1&& get(pair<T1, T2>&& Pr) noexcept;
// get rvalue reference to element T2 in pair Pr
template <class T2, class T1>
constexpr T2&& get(pair<T1, T2>&& Pr) noexcept;
Paramètres
Index
Index de base 0 de l’élément choisi.
T1
Type du premier élément de la paire.
T2
Type du deuxième élément de la paire.
pr
Paire dans laquelle opérer la sélection.
Notes
Chaque fonction de modèle retourne une référence à un élément de son pair
argument.
Pour les surcharges indexées, si la valeur de Index
est 0, les fonctions retournent pr.first
; si la valeur de Index
est 1, les fonctions retournent pr.second
. Le type RI
est le type de l’élément retourné.
Pour les surcharges qui n’ont pas de Index
paramètre, l’élément à retourner est déduit par l’argument de type. L’appel get<T>(Tuple)
génère une erreur du compilateur s’il pr
contient plus ou moins d’un élément de type T
.
Exemple
#include <utility>
#include <iostream>
using namespace std;
int main()
{
typedef pair<int, double> MyPair;
MyPair c0(9, 3.14);
// get elements by index
cout << " " << get<0>(c0);
cout << " " << get<1>(c0) << endl;
// get elements by type (C++14)
MyPair c1(1, 0.27);
cout << " " << get<int>(c1);
cout << " " << get<double>(c1) << endl;
}
9 3.14
1 0.27
index_sequence
template<size_t... I>
using index_sequence = integer_sequence<size_t, I...>;
index_sequence_for
template<class... T>
using index_sequence_for = make_index_sequence<sizeof...(T)>;
make_index_sequence
template<size_t N>
using make_index_sequence = make_integer_sequence<size_t, N>;
make_integer_sequence
template<class T, T N>
using make_integer_sequence = integer_sequence<T, see below >;
make_pair
Fonction de modèle que vous pouvez utiliser pour construire des objets de type pair
, dont les types de composants sont sélectionnés automatiquement en fonction des types de données qui sont transmis comme paramètres.
template <class T, class U>
pair<T, U> make_pair(T& Val1, U& Val2);
template <class T, class U>
pair<T, U> make_pair(T& Val1, U&& Val2);
template <class T, class U>
pair<T, U> make_pair(T&& Val1, U& Val2);
template <class T, class U>
pair<T, U> make_pair(T&& Val1, U&& Val2);
Paramètres
Val1
Valeur qui initialise le premier élément de pair
.
Val2
Valeur qui initialise le second élément de pair
.
Valeur de retour
Objet de paire construit : pair
T
<,U
>(Val1
, ). Val2
Notes
make_pair
convertit l’objet de la classe de type reference_wrapper
en types de référence et convertit les tableaux et fonctions en pointeurs.
Dans l'objet pair
retourné, T
est déterminé comme suit :
Si le type d'entrée
T
a pour valeurreference_wrapper<X>
, le type retournéT
a pour valeurX&
.Sinon, le type retourné
T
a pour valeurdecay<T>::type
. Sidecay
la classe n’est pas prise en charge, le typeT
retourné est identique au typeT
d’entrée.
Le type retourné U
est déterminé de façon similaire à partir du type d'entrée U
.
L’un des avantages est make_pair
que les types d’objets stockés sont déterminés automatiquement par le compilateur et ne doivent pas être spécifiés explicitement. N’utilisez pas d’arguments de modèle explicites tels que make_pair<int, int>(1, 2)
lorsque vous utilisez make_pair
, car il est détaillé et ajoute des problèmes de référence rvalue complexes susceptibles d’entraîner un échec de compilation. Pour cet exemple, la syntaxe correcte serait make_pair(1, 2)
.
La fonction d'assistance make_pair
permet également de transmettre deux valeurs à une fonction qui requiert une paire en tant que paramètre d'entrée.
Exemple
Pour obtenir un exemple sur l’utilisation de la fonction make_pair
d’assistance pour déclarer et initialiser une paire, consultez pair
Structure.
move
Effectue un cast non conditionnel de son argument en une référence rvalue, et signale par là-même qu’elle peut être déplacée si son type prend en charge le mouvement.
template <class Type>
constexpr typename remove_reference<Type>::type&& move(Type&& Arg) noexcept;
Paramètres
Type
Type déduit du type de l'argument transmis dans Arg
, avec les règles de réduction de référence.
Arg
Argument sur lequel effectuer un cast. Bien que le type de Arg
semble être spécifié en tant que référence rvalue, move
accepte également les arguments lvalue, car les références lvalue peuvent être liées aux références rvalue.
Valeur de retour
Arg
en tant que référence rvalue, que son type soit un type référence ou non.
Notes
L’argument Type
de modèle n’est pas destiné à être spécifié explicitement, mais à déduire du type de la valeur passée Arg
. Le type de Type
est ajusté plus en détail en fonction des règles de réduction de référence.
move
ne déplace pas son argument. Au lieu de cela, en effectuant un cast non conditionnel de son argument (qui peut être une lvalue) en une référence rvalue, elle permet au compilateur de déplacer ultérieurement, plutôt que de copier, la valeur transmise dans Arg
si son type prend en charge le mouvement. Si son type n’est pas activé pour le déplacement, il est copié à la place.
Si la valeur transmise dans Arg
est une lvalue (autrement dit, si elle a un nom ou que son adresse peut être prise), elle est invalidée lorsque le déplacement se produit. Ne faites pas référence à la valeur transmise Arg
par son nom ou son adresse après son déplacement.
move_if_noexcept
template <class T> constexpr conditional_t< !is_nothrow_move_constructible_v<T> && is_copy_constructible_v<T>, const T&, T&&> move_if_noexcept(T& x) noexcept;
swap
Échange les éléments de deux types ou pair
objets Structure .
template <class T>
void swap(T& left, T& right) noexcept(see below );
template <class T, size_t N>
void swap(T (&left)[N], T (&right)[N]) noexcept(is_nothrow_swappable_v<T>);
template <class T, class U>
void swap(pair<T, U>& left, pair<T, U>& right);
Paramètres
left
Objet de type ou de type pair
.
right
Objet de type ou de type pair
.
Notes
L’un des avantages est swap
que les types d’objets stockés sont déterminés automatiquement par le compilateur et ne doivent pas être spécifiés explicitement. N’utilisez pas d’arguments de modèle explicites tels que swap<int, int>(1, 2)
lorsque vous utilisez swap
, car il est détaillé et ajoute des problèmes de référence rvalue complexes susceptibles d’entraîner un échec de compilation.
to_chars
to_chars_result to_chars(char* first, char* last, see below value, int base = 10);
to_chars_result to_chars(char* first, char* last, float value);
to_chars_result to_chars(char* first, char* last, double value);
to_chars_result to_chars(char* first, char* last, long double value);
to_chars_result to_chars(char* first, char* last, float value, chars_format fmt);
to_chars_result to_chars(char* first, char* last, double value, chars_format fmt);
to_chars_result to_chars(char* first, char* last, long double value, chars_format fmt);
to_chars_result to_chars(char* first, char* last, float value, chars_format fmt, int precision);
to_chars_result to_chars(char* first, char* last, double value, chars_format fmt, int precision);
to_chars_result to_chars(char* first, char* last, long double value, chars_format fmt, int precision);
Notes
Convertit la valeur en chaîne de caractères en remplissant la plage [first, last)
, où il [first, last)
est nécessaire d’être une plage valide.