`) Faire dans un en-tête de fonction ? " />
Opérateur de flèche (->) dans les en-têtes de fonctions
Cet article examine l'opérateur de flèche (->) utilisé dans les en-têtes de fonctions, qui est un aspect fondamental de la syntaxe de C 11.
Comprendre la flèche Opérateur
C 11 a introduit deux syntaxes équivalentes pour la déclaration de fonction :
L'opérateur fléché (->;) dans le second La syntaxe remplit un objectif crucial. Elle permet de déduire le type de retour d'une fonction à partir de ses arguments à l'aide du mot-clé decltype.
Pourquoi utiliser le type de retour auto-déduit ?
Dans certaines situations, il est avantageux de dériver le type de retour dynamiquement en fonction des types d'arguments. Par exemple, considérons la fonction suivante qui calcule la somme de deux. valeurs :
template <typename T1, typename T2> decltype(a + b) compose(T1 a, T2 b);
Dans ce cas, l'argument decltype informe le compilateur que le type de retour doit être le même que le type de l'expression a b. Cependant, cette déclaration génère une erreur car le compilateur ne dispose pas d'informations sur a et b dans l'argument decltype.
Surmonter l'erreur
Pour résoudre ce problème, vous pouvez soit utilisez std::declval et les paramètres du modèle pour spécifier manuellement les types :
template <typename T1, typename T2> decltype(std::declval<T1>() + std::declval<T2>()) compose(T1 a, T2 b);
ou utilisez la syntaxe de déclaration alternative avec l'opérateur de flèche (->) :
template <typename T1, typename T2> auto compose(T1 a, T2 b) -> decltype(a + b);
Cette dernière option est plus concise et rationalise les règles de portée.
Améliorations C 14
En C 14, la syntaxe suivante est également autorisée tant que la fonction est entièrement définie avant utilisation et que toutes les instructions return en déduisent la même tapez :
auto identifier (argument-declarations...)
Cependant, l'opérateur flèche (->) reste utile pour déclarer des fonctions publiques (dans les en-têtes) tout en masquant leurs corps dans les fichiers sources.
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!