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.
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)...); }
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>{}); }
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
Déclaration de pointeur :
decltype(auto)*x7d = &i; // decltype(x7d) 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!