Sémantique "auto" C 11
En C 11, le mot clé "auto" permet au compilateur de déduire automatiquement le type d'un variable. Comprendre les règles de cette déduction est crucial pour déterminer si « auto » donnera lieu à une valeur ou à un type de référence.
Déduction de type pour valeur et référence
Le principal Le principe régissant la déduction de type est que le type d'« auto » est déterminé par la manière dont elle est déclarée. Par exemple :
<code class="cpp">int i = 5; auto a1 = i; // value auto &a2 = i; // reference</code>
Dans l'exemple ci-dessus, "a1" est déduit comme une valeur entière, tandis que "a2" est déduit comme une référence entière.
Exemples
1. Renvoyer une référence :
<code class="cpp">const std::shared_ptr<Foo>& get_foo(); auto p = get_foo();</code>
Dans ce cas, "auto" déduit un type de référence car "get_foo()" renvoie une référence const.
2. Pointeur statique :
<code class="cpp">static std::shared_ptr<Foo> s_foo; auto sp = s_foo;</code>
Ici, "auto" déduit un type de valeur car "s_foo" est un pointeur statique, qui n'est pas une référence.
3. Boucle sur un conteneur de pointeurs :
<code class="cpp">std::vector<std::shared_ptr<Foo>> c; for (auto foo : c) {</code>
Dans cette boucle, "auto" garantit que "foo" est déduit comme un pointeur partagé vers Foo. Chaque itération crée une copie de valeur du pointeur.
Conclusion
Pour résumer, les règles de déduction de type pour « auto » en C 11 sont simples. Si l'expression d'initialisation est une valeur, "auto" en déduit un type valeur. Si l'expression d'initialisation est une référence, "auto" en déduit un type référence. Comprendre ces règles est essentiel pour utiliser efficacement « auto » et éviter les comportements inattendus.
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!