Maison > développement back-end > C++ > Que fait l'opérateur flèche (`->`) dans un en-tête de fonction ?

Que fait l'opérateur flèche (`->`) dans un en-tête de fonction ?

Barbara Streisand
Libérer: 2024-11-18 07:08:02
original
1050 Les gens l'ont consulté

What Does the Arrow Operator (`->`) Faire dans une rubrique de fonction ? 
`) 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 :

  1. identifiant de type de retour (argument-declarations...)
  2. identifiant automatique ( argument-declarations...) -> return_type

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);
Copier après la connexion

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);
Copier après la connexion

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);
Copier après la connexion

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...)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal