Maison >développement back-end >C++ >Comment \'auto\' détermine-t-il la valeur par rapport aux types de référence en C 11 ?

Comment \'auto\' détermine-t-il la valeur par rapport aux types de référence en C 11 ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-04 07:53:31236parcourir

How Does

Déduction de type Sémantique de "auto" en C 11

En C 11, le mot-clé "auto" déduit le type d'une variable à partir de le type de son initialiseur. Cependant, déterminer si « auto » se résout en une valeur ou une référence peut parfois être ambigu.

Valeur vs référence

La règle clé pour la déduction de type avec « auto » " est que le type déduit est équivalent au type déclaré.

  • Si le type déclaré est un type valeur, "auto" se résoudra en un valeur.
  • Si le type déclaré est un type de référence, "auto" sera résolu en une référence.

Exemples

  • auto i = v.begin(); - Puisque v.begin() renvoie un itérateur par valeur, "auto" se résout en une valeur.
  • const std::shared_ptr& get_foo(); - Le type de la fonction est une référence, donc "auto" sera résolu en une référence.
  • static std::shared_ptr s_foo; - Le type de la variable est un pointeur, donc "auto" sera résolu en une valeur.
  • std::vector> c; - Le type du conteneur est un vecteur de pointeurs, donc "auto" se résoudra en une valeur.

Déduction de type

L'exemple suivant démontre le comportement de déduction de type :

<code class="cpp">int i = 5;
auto a1 = i;    // value
auto &a2 = i;  // reference</code>

Dans cet exemple, "a1" est de type int (valeur), tandis que "a2" est de type int& (référence).

Conclusion

Comprendre la sémantique de déduction de type de « auto » est crucial pour écrire du code C correct et efficace. En adhérant à la règle de résolution « automatique » du type déclaré, les développeurs peuvent déduire avec précision les types de variables et tirer parti des avantages de cette fonctionnalité.

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!

Déclaration:
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