Est-ce que quelqu'un a déjà vu la classe de stockage auto explicitement utilisée en c/C++? Si oui, dans quelle situation?auto c/C++
Répondre
auto n'est jamais utile dans le langage C/C++ actuel car toutes les variables sont implicitement auto. Il est utile en C++ 0x, où il peut remplacer entièrement la déclaration de type - si vous avez une variable avec une affectation initiale, 'auto' en fera juste le type de cette valeur d'assignation, comme dans les commentaires.
Non, il est supposé que vous omettez le spécificateur de classe. Les seules utilisations raisonnables que je peux penser seraient d'attirer l'attention sur une variable locale particulière qui remplace, disons, une variable globale avec le même nom, ou comme une question d'entrevue.
Les chances sont, vous allez confondre le pauvre programmeur qui est coincé en maintenant le code!
Je n'ai pas vu auto
utilisé dans le code écrit au cours des 10 dernières années. Il n'y a aucune raison d'utiliser auto
puisque les seuls endroits où vous pouvez l'utiliser est de toute façon implicite. La seule raison pour laquelle il existe encore est pour la rétrocompatibilité, mais il devrait être évité dans le nouveau code.
Comme Alex a couvert, auto est utilisé dans C++ 0x pour déclarer des types dans les déclarations d'initialisation où le type est déduit à partir du code d'initialisation.
Il y avait une proposition pour qu'il soit également utilisé comme type de retour, où le type est déduit du code renvoyant une valeur. Cependant, cela a donné lieu à une ambiguïté, donc, au moment de l'écriture, quelque chose de plus cohérent avec la syntaxe lambda de C++ 0x est à l'étude.
Dans GCC, vous devrez peut-être automatique pour déclarer la fonction imbriquée afin de pouvoir définir partout dans le corps de la fonction - voir http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Nested-Functions.html
Tout en haut de cette page, il est dit que les fonctions imbriquées ne sont pas supportées par GNU C++. Donc, les trucs automatiques concernant les fonctions imbriquées s'appliquent à d'autres implémentations de C++? – c0m4
@ c0m4: Il serait plus sûr de supposer que les extensions GNU C comme les fonctions imbriquées ne sont pas disponibles avec d'autres compilateurs. –
Voici un exemple de mon code, écrit en C++ 11:
c_srgb find_in_book(const c_HVC &HVC) {
auto b = munsell.mun_to_rgb_book.find(HVC);
if(b != munsell.mun_to_rgb_book.end()) {
c_srgb f = b->second;
return f;
} else {
c_srgb ret;
ret.r=ret.g=ret.b=0;
return ret;
}
}
Je préfère que ceci:
c_srgb find_in_book(const c_HVC &HVC) {
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<dj::color::c_HVC,dj::color::c_srgb,std::less<dj::color::c_HVC>,std::allocator<std::pair<const dj::color::c_HVC,dj::color::c_srgb>>,false>>> b = munsell.mun_to_rgb_book.find(HVC);
if(b != munsell.mun_to_rgb_book.end()) {
c_srgb f = b->second;
return f;
} else {
c_srgb ret;
ret.r=ret.g=ret.b=0;
return ret;
}
}
- 1. Expression régulière: Correspond à (aa | bb) (cc)?
- 2. Comment supprimer cc, bcc dans MailComposerViewController?
- 3. Différence entre CC, gcc et g ++?
- 4. Subversion auto-props woes
- 5. Obtention d'une copie CC des messages d'invite utilisateur
- 6. Accolade électrique intelligente dans les modes cc (C#, Java, etc.)
- 7. Marquage CC dans les mails envoyés via MailLoggers de nant
- 8. python: comment envoyer du courrier avec TO, CC et BCC?
- 9. CSS Margin Auto
- 10. Auto Size Silverlight Application
- 11. auto générer l'horodatage
- 12. Stop CruiseControl.NET auto build
- 13. ancêtre ou auto
- 14. Auto Scolling de JEditorPane
- 15. Jboss Auto start
- 16. Auto-nettoyage pour TortoiseSVN
- 17. ActiveRecord - Associations auto-référencées
- 18. Django Dropdown Auto soumettre
- 19. Annotations Hibernate, auto-incrémenté
- 20. URL auto-référencées
- 21. Auto-complétion effaçable
- 22. iframe auto redimensionner
- 23. dll auto image-base
- 24. Auto __repr__ méthode
- 25. FLASH Auto Looping Disable
- 26. (N) Hibernate Auto-Join
- 27. ASP.NET TreeView auto expand?
- 28. Onglet Auto dans JQuery
- 29. Auto-connexion avec des cookies
- 30. C# auto propriété VS 2005?
Pourriez-vous inclure un exemple de C++ 0x utiliser? – c0m4
auto funcptr = std :: tr1 :: bind (& Foo :: Bar, ceci, _1, _2); Ceci déclare que "funcptr" est du même type que "bind" renvoie (ce qui est un type sérieusement compliqué, dans l'ancien temps, vous l'enveloppiez dans un template de fonction std :: tr1 ::, mais avec auto pas besoin de faire ça plus). –
Est-ce un cas particulier ou fonctionne-t-il plus généralement, comme auto someVar = functionThatReturnsUnknownType(); ? – c0m4