Maison >développement back-end >C++ >Comment « decltype(auto) » étend-il les capacités de déduction de type C ?
L'introduction de decltype(auto) dans C 14 a apporté une fonctionnalité transformatrice qui étendu les possibilités de déduction de type. Au-delà de son objectif principal consistant à permettre aux déclarations automatiques de se conformer aux règles decltype, decltype(auto) offre une myriade d'autres applications utiles.
Dans le code générique, la transmission parfaite des types de retour est cruciale. Contrairement au code non générique, où les types de retour peuvent être spécifiés manuellement pour obtenir un type de référence, decltype(auto) offre la flexibilité de transmettre les types de retour, quel que soit leur type de référence, sans aucune connaissance préalable.
template
decltype(auto) Exemple(Fun fun, Args&&... args)
{
return fun(std::forward<Args>(args)...);
}
Dans les modèles récursifs, une récursivité infinie peut se produire pendant instanciation de modèle si le type de retour est spécifié sur la base d'une itération précédente. En utilisant decltype(auto), la déduction du type de retour est reportée jusqu'à ce que l'instanciation du modèle soit terminée, garantissant ainsi une résolution de type appropriée.
template
struct Int {};
constexpr auto iter(Int<0>) -> Int<0>;
template
constexpr auto iter(Int) -> decltype(auto)
{ return iter(Int
int main() { decltype(iter(Int<10>{})) a; >
La polyvalence de decltype(auto) s'étend également à d'autres contextes, comme indiqué dans le projet de norme C (N3936) :
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!