Opérateur de flèche dans les en-têtes de fonction
En C 11 et versions ultérieures, deux syntaxes existent pour les déclarations de fonction :
Syntaxe traditionnelle :
return-type identifier(argument-declarations...)
Moderne Syntaxe :
auto identifier(argument-declarations...) -> return_type
Les deux syntaxes sont équivalentes. Cependant, la syntaxe moderne offre un moyen pratique de déduire le type de retour à partir des types d’arguments. Ceci est particulièrement utile lors de l'utilisation du spécificateur decltype, qui vous permet de décrire le type d'une expression.
Dans les versions C précédentes, vous écririez :
template <typename T1, typename T2> decltype(a + b) compose(T1 a, T2 b);
Cependant, le compilateur Je ne sais pas ce que sont a et b lorsque vous essayez de déterminer le type de retour.
Pour résoudre ce problème, vous pouvez utiliser declval :
template <typename T1, typename T2> decltype(std::declval<T1>() + std::declval<T2>()) compose(T1 a, T2 b);
Cependant, cela devient verbeux. Au lieu de cela, la syntaxe moderne vous permet d'écrire :
template <typename T1, typename T2> auto compose(T1 a, T2 b) -> decltype(a + b);
Cette syntaxe est plus concise et conserve les mêmes règles de portée.
Mise à jour C 14 :
C 14 permet l'utilisation de la syntaxe suivante :
auto identifier(argument-declarations...)
tant que la fonction est entièrement définie avant utilisation et toutes les instructions return déduisent le même type.
Cas d'utilisation :
La syntaxe de l'opérateur fléché (->) reste utile pour les fonctions publiques déclarées dans les fichiers d'en-tête où vous souhaitez masquer l'implémentation dans le fichier source. Ceci est particulièrement pertinent pour les fonctions de modèle ou les types concrets spécialisés dérivés de la métaprogrammation de modèles.
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!