Déduction de type "auto" C 11 : résolution de la référence par rapport à la valeur
En C 11, le mot-clé "auto" offre un moyen pratique pour déduire automatiquement le type d'une variable. Cependant, lorsque vous utilisez « auto », il est essentiel de comprendre les règles qui déterminent s'il se résout en une valeur ou une référence.
Type de règles de déduction pour « auto » :
La règle fondamentale est que "auto" interprète la déclaration de la variable elle-même, et non le type qu'elle représente. Par conséquent, l'exemple suivant démontre clairement que « auto » se résout en une valeur :
<code class="cpp">auto i = v.begin(); // Copy, as begin() returns an iterator by value</code>
Cependant, dans des scénarios plus complexes, la distinction peut être moins apparente. Considérons les exemples suivants :
<code class="cpp">const std::shared_ptr<Foo>& get_foo(); auto p = get_foo(); // Copy or reference?</code>
Dans ce cas, "auto" déduit le type de le type de retour de la fonction get_foo(), qui est une référence à un std::shared_ptr
<code class="cpp">static std::shared_ptr<Foo> s_foo; auto sp = s_foo; // Copy or reference?</code>
Ici, "auto" déduit le type de la déclaration de s_foo, qui est un std::shared_ptr
<code class="cpp">std::vector<std::shared_ptr<Foo>> c; for (auto foo: c) { // Copy for every loop iteration?</code>
Dans ce cas, "auto" déduit le type du type itérateur du vecteur. L'itérateur renvoie std::shared_ptr
Conclusion :
La règle de la déduction de type "auto" est simple : elle suit la déclaration de la variable elle-même. Pour résoudre en une référence, utilisez une esperluette dans la déclaration (auto &ref = ...). Sinon, "auto" déduira un type valeur.
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!