Maison > développement back-end > C++ > Quelles sont les applications de `decltype(auto)` en C ?

Quelles sont les applications de `decltype(auto)` en C ?

Mary-Kate Olsen
Libérer: 2024-12-11 09:32:09
original
771 Les gens l'ont consulté

What are the Applications of `decltype(auto)` in C  ?

Quelles sont certaines utilisations de decltype(auto) ?

Introduit en C 14, l'idiome decltype(auto) permet aux déclarations automatiques d'utiliser les règles decltype sur le donné expression. Bien que son utilisation principale soit la déduction de type de retour d'une fonction, il existe d'autres applications intéressantes.

Transfert de type de retour dans le code générique

Dans le code générique, decltype(auto) permet le transfert parfait d'un retour type sans connaître son type sous-jacent. Ceci est particulièrement utile pour les fonctions génériques :

template<class Fun, class... Args>
decltype(auto) Example(Fun fun, Args&&... args) {
    return fun(std::forward<Args>(args)...);
}
Copier après la connexion

Retarder la déduction du type de retour dans les modèles récursifs

decltype(auto) peut également retarder la déduction du type de retour dans les modèles récursifs, empêchant ainsi une récursion infinie. Par exemple :

template<int i>
struct Int {};

constexpr auto iter(Int<0>) -> Int<0>;

template<int i>
constexpr auto iter(Int<i>) -> decltype(auto) {
    return iter(Int<i-1>{});
}
Copier après la connexion

Autres utilisations

Au-delà de ces applications principales, decltype(auto) a diverses autres utilisations, comme indiqué dans le projet de norme C (N3936) :

  • Variable initialisation :

    decltype(auto) x3d = i;  // decltype(x3d) is int
    Copier après la connexion
  • Déclaration de pointeur :

    decltype(auto)*x7d = &i;  // decltype(x7d) is int*
    Copier après la connexion
  • Représentation d'un type d'espace réservé dans des contextes spécifiques, tels que les déclarateurs de fonction, les séquences de spécificateur de type et les identifiants de fonction de conversion.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal