Maison >développement back-end >C++ >Comment `decltype(auto)` améliore-t-il la déduction du type de retour et l'utilisation des modèles en C ?
Utilisations de la fonctionnalité linguistique 'decltype(auto)'
Introduit en C 14, l'idiome 'decltype(auto)' permet ' auto' pour exploiter les règles 'decltype' sur les expressions spécifiées, principalement pour la déduction du type de retour dans les fonctions. Cependant, son utilité s'étend au-delà de ce scénario.
Transfert de type de retour dans le code générique
Pour le code non générique, une sélection explicite de types de retour comme références est possible. Cependant, dans le code générique, 'decltype(auto)' permet un transfert précis du type de retour, que le type de retour soit une référence ou une valeur.
template<class Fun, class... Args> decltype(auto) Example(Fun fun, Args&&... args) { return fun(std::forward<Args>(args)...); }
Retarder la déduction du type de retour dans les modèles récursifs
Lors de la définition de modèles récursifs, 'decltype(auto)' peut reporter la déduction du type de retour jusqu'après le modèle instanciation.
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>{}); } int main() { decltype(iter(Int<10>{})) a; }
Applications supplémentaires
Selon le projet de norme N3936, 'decltype(auto)' peut apparaître dans divers contextes, notamment les déclarateurs de fonctions, les spécificateurs de type , et initialisation des variables. Ces contextes sont utiles pour des actions telles que la déduction du type de retour, la désignation d'un espace réservé de type et l'attribution d'une valeur sûre.
int i; int&& f(); auto x3a = i; // decltype(x3a) is int decltype(auto) x3d = i; // decltype(x3d) is int auto x4a = (i); // decltype(x4a) is int decltype(auto) x4d = (i); // decltype(x4d) is int& auto x5a = f(); // decltype(x5a) is int decltype(auto) x5d = f(); // decltype(x5d) is int&&
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!