Cela peut sembler une question triviale, mais c'est une question qui me dérange beaucoup ces derniers temps. Pourquoi certains programmeurs se réfèrent-ils à "C ++ / STL" comme une langue différente? La STL fait partie de la bibliothèque standard C ++ - et fait donc partie de la langue, "C ++". Ce n'est pas un composant séparé, et il ne vit pas seul dans la portée des choses C ++. Pourtant, certains agissent continuellement comme si c'est une langue différente. Pourquoi? P>
6 Réponses :
Probablement parce que STL est venu un peu tard au jeu C ++ et de nombreuses personnes ont écrit du code qui n'utilise aucun stl. Par exemple, pensez à la programmation de Thème Win32 avec MFC. P>
devinez: p>
Quand C ++ a été publié pour la première fois, la STL n'existait pas. Il est entré dans l'existence plus tard comme une addition facultative puis a été intégrée à la norme. P>
@Sdgator: Vous êtes incorrect. Le premier "standard C ++", C ++ 98, comprend la STL dans le cadre de la bibliothèque standard.
Bien sûr, mais C ++ était environ 10 ans avant sa normalisation.
@Gabe and Dreamlax: Je ne faisais pas référence à la réponse de Heath, je faisais référence à un commentaire (maintenant supprimé) de SDGATor. Heath est complètement correct.
@Billyonéal: a supprimé mon commentaire parce que je viens de voir que vous abordiez quelqu'un d'autre :)
Ce n'était pas vraiment une supposition, car mon explication est la raison pour laquelle je considère personnellement STL un complément à C ++. Cela n'existait pas quand j'ai appris C ++.
Une compréhension de la STL n'est pas nécessaire pour comprendre C ++. Il est utile d'avoir quand vous avez besoin d'adtes, mais vous pouvez y aller (aurait pu partir?) Dans toute votre carrière C ++ sans avoir besoin de cela. P>
+1 - Mais alors pourquoi n'y a-t-il pas de C ++ / iostreams? Vous n'avez peut-être pas vraiment besoin de comprendre iostreams mais personne ne les traite comme une autre langue ...
Que je ne sais pas. Probablement dû à la taille. Les iostreams sont un truc de surcharge de l'opérateur, mais la STL est une grande boule collante d'environ deux douzaines d'en-têtes.
Accepter cette réponse - mais ce n'est pas en fait un "correct", car cette question est une sorte de subjective. J'accepte cela parce que cela a le plus grand nombre de votes.
De plus, certains espaces d'application sont allergiques à la STL de manière à ce qu'ils ne soient pas à d'autres caractéristiques telles que les espaces de messagerie et les espaces de noms.
@Billy: C'est peut-être parce que iOSTreams ne représente pas un nouveau paradigme séparé. C'est juste une bibliothèque de flux oopé non-oopé. STL est à la fois largement différente du code que la plupart des gens sont utilisés et une portée suffisamment large pour être utile à son égard. Vous ne pouvez pas faire grand chose avec juste des flux, mais avec des conteneurs, des itérateurs et des algorithmes, vous pouvez écrire des programmes assez sophistiqués.
Les réponses ci-dessus sont vraiment bonnes; Je vais ajouter seulement à leur contenu dans un contexte plus large. p>
Les développeurs peuvent se référer à Langue / API | Library E.G. C / Win32, Java / Struts, Java / Spring, C # /. NET MVC, car il existe essentiellement deux bases de connaissances - Connaissance de la langue en question et la connaissance de la manière d'utiliser cette bibliothèque, une API ou un cadre spécifique. Quelque chose comme Win32 est assez énorme, comme dis Django, que j'apprends actuellement. Django elle-même fonctionne de manière très spécifique et sachant que c'est ce que j'apprends, pas python. P>
La même chose est vraie de C ++ / MFC ou C ++ / Boost ou C ++ / STL. La langue est C ++ - l'API / Bibliothèque que vous utilisez est MFC, Boost ou STL. P>
Si c'est une bibliothèque, que bien, mais la STL est une partie centrale de la langue elle-même et en disant C ++, vous impliquez STL. Ce n'est pas une bibliothèque tierce partie. Je ne vois pas Java / Collections standard, ou C # / Génériques n'importe où ...
@Billyonéal: STL ne fait pas partie de la norme C ++, et ce n'est pas une partie centrale de la langue.
@DeMlax: Oui, c'est. Le premier "standard C ++", C ++ 98, comprend la STL dans le cadre de la bibliothèque standard. C ++ 03 est la norme actuelle, qui n'est que C ++ 98 avec quelques corrections.
@Billyonéal: voir Stackoverflow.com/questions/2245196/c-urban-myths Pour plus de détails.
@DeMlax: le mot "Bibliothèque de modèles standard" n'existe pas dans la norme car la "STL" fait partie de la bibliothèque standard. vecteur code>,
chaîne code>, les algorithmes standard et tels que dans la bibliothèque standard.
La liaison dans ce lien est juste que la STL est quelque chose que SGI a inventé, dont la plupart ont été incorporées, avec quelques modifications, dans la norme. STL est devenu un abu pour cette partie de la norme. Personne quand ils disent "C ++ / STL" signifie "Standard C ++, ainsi que la SGI's STL". Si rien d'autre, une telle bête ne peut pas exister, car certaines définitions sont conflit entre les deux.
@Billyonéal: la bibliothèque de modèles standard (publiée par SGI) et la bibliothèque standard C ++ peuvent partager des fonctionnalités communes, mais cela ne signifie pas que les termes sont interchangeables ou que l'un est un surset de l'autre. La STL par exemple contient une classe appelée Slist code> qui ne figure pas dans la bibliothèque standard C ++.
@DeMlax: D'accord, cela pourrait être une technicité mineure, mais lorsque 99,9% des programmeurs C ++ font référence à "The STL", ils ne font référence pas à la bibliothèque de SGI, mais ils font référence aux conteneurs, itérateurs et algorithmes standard, qui ont été pris de la STL d'origine. Ce morceau de langage principal est ce que je fais référence à ma question.
@DeMlax: Si NineFingers a raison et "C ++ / STL" signifie "Langue + bibliothèque", et vous avez raison d'utiliser la définition appropriée de STL, puis le terme lui-même est faux, car il n'est pas possible d'avoir la norme C ++ ensemble avec le "vrai" stl. Comme certaines personnes disent "C ++ / STL", nous ne pouvons donc pas supposer qu'ils signifient la définition appropriée de la STL. La question à portée de main est, que veulent-ils dire?
Il est possible d'être un programmeur compétent et expérimenté C ++ et n'utilisez jamais la STL. Vous pouvez utiliser Boost ou Ace ou être un programmeur Windows MFC pendant 10 ans. P>
Si vous voulez que quelqu'un ait été expérimenté à l'aide de la STL, demandez à quelqu'un qui sait C ++ n'est pas garanti que vous en obtiendrez un. P>
Aussi pour mon esprit, le code d'écriture qui est fortement dépendant de la STL se sent très différent d'écrire, par exemple, le code MFC. Ils pourraient aussi bien être des langues différentes. Ils n'auront certainement pas l'air particulièrement similaire. P>
Lorsque vous écrivez un CV, les gens énumèrent souvent C / C ++ comme langue, qui, dans de nombreux cas, ils ne le savent pas non plus. P>
CV parfois réprouvé listerait "Visual C ++" comme langue, essayant d'indiquer qu'ils ne savent pas ce qu'est une langue. P>
Ceci, avec une "bonne connaissance des déclarations C ++ et PHP", allez détroit dans la corbeille de recyclage à mon entreprise A >. Pas parce qu'ils sont nécessairement mauvais programmeurs - mais parce que la durée de l'entretien ne vaut pas la peine. P>
Ce qui ne va pas mentionner deux technologies de complexités très différentes dans une phrase.
"Certains agissent continuellement comme si c'était une langue différente", je ne crois pas que ce soit vraiment la motivation, mais vous pouvez l'interpréter comme étant parce que C ++ est un langage de programmation multi-paradigme. Un paradigme (ou collection de paradigmes) utilise les modèles standard, d'autres non. C ++ / STL spécifie donc quelque chose qui pourrait aussi bien être une langue différente de "C ++ \ stl". Par exemple, il existe des fourches de style C ++ telles que Symbian C ++, qui sont vraiment différentes langues (ou étaient les suivantes: je pense que Symbian est plus ou moins en ligne maintenant qu'il possède des modèles appropriés et de STLPORT).
@Steve Jessop: mettez cela dans une réponse afin que nous puissions uppouver le: p
Nah, ce n'est pas une réponse parce que comme je le disais, je ne pense pas que c'est pourquoi les gens disent C ++ / STL. Je pense qu'ils veulent dire ce que dit Ignacio, "C ++, et je veux que vous sachiez la STL: pas une alternative". Je suppose que je pourrais ajouter, ils signifient également "C ++ et le savent réellement, non seulement les premières conférences de certains cours d'université pour apprendre la syntaxe de base et ignorer les bits difficiles".
Comme ces gens ont tort, je ne pense pas qu'il y ait un point dans le raisonnement pourquoi i> ils agissent de cette façon.