J'ai toujours considérer le C++ comme une alternative au C, en moins bien cependant, le C reste à mes yeux un modèle, il est touffu, complexe et déroutant mais il forme des dévs de qualité qui savent mettre les mains dans la sauce sans rechigner et qui savent gérer un language strict.
Le C++ n'est pas mauvais en soi, disons qu'il différe du C en une version moins directe et moins "lisible" à mes yeux, mais là encore, chacun y verra midi à sa porte.
@Luc: oui, le fait de présenter en premier string et vector est déjà un grand pas. Et je n'ai pas mieux comme tuto en français a recommander (pour l'instant, mais cela finira par arriver, j’espère)
(si je voulais troller, je dirais que pour commencer, il utilise code::block et pas vim, c'est déjà un gros point négatif). Plus sérieusement, de mémoire, il conseille d'utiliser const, mais ne le fait jamais. Il déclare ses variables en début de fonction. Plus généralement, il ne transmet pas l'importance du RAII en général. Je trouve que cela se sent qu'il (il = mathieu) n'est pas développeur C++.
Luc aime citer l'article suivant : Retour de fonctions ou exceptions ?
Tu vois souvent du code C qui ressemble au code donné a la fin ? (c'est a dire un code qui vérifie correctement les erreurs)
Ce qui disent que le C forme de "bons" développeurs inversent le raisonnement. Il est vrai que pour coder proprement en C, il faut être rigoureux. Cela ne veut peut dire que ceux qui apprennent le C deviennent rigoureux. Une grande partie des apprenants font juste du code crade, sans le savoir. Parce les défauts de langages "bas niveau" comme le C (et en partie le C++) ne se voient que sur les projets conséquents, pas sur les petits projets pédagogiques que font les étudiants pendant leur études. (Le raisonnement est similaire pour ceux qui n'utilisent pas les outils du C++ "moderne", c'est parce qu'ils n'ont jamais passe plusieurs jours a rechercher l'origine d'un comportement indéterminé pendant plusieurs jours/semaines sur un projet de plusieurs centaines de milliers ou millions de lignes de code)
Beaucoup de codeur C et C++ programment dans le monde magique des bisounours ou il n'y a jamais d'erreurs...
>Mintho Carmo: C'est ce que je sous-entend, la rigueur est un principe fondamental pour ceux qui s'attachent au C.
Si je regarde ne serait-ce que 10% des codes d'étudiants qui veulent faire du dév seul 3-4 % savent comment organiser, hiérarchiser et mettre au propre un code correct, je ne me vante pas comme étant forcément hiérarchisé comme certains mais je pense pouvoir mettre mon poing sur la table afin de me lever contre cette génération de dévs en mousse ...
Je parlais plutôt de ça :
Je voulais parler de ça mais il est parfois nécessaire de devoir libérer de la mémoire explicitement.le gêne est que « nous avons encore la possibilité d'utiliser new et delete
Dans ce cas là delete est la seule solution.
Rien n'empêche ta capsule RAII de fournir ce qu'il faut pour ça dans son interface (unique_ptr<T>::reset(), vector<T>::resize, etc ...), et celles de base répondent à une très vaste partie des besoins. Tu peux avoir besoin de delete si tu implémentes ton propre type RAIIsant mais encore une fois, il est fort possible que l'utilisation des conteneurs existant te permette cette implémentation (efficace). Même si tu implémentes ton propre type, avec un GC en manager derrière, il est très fortement probable que tu n'aies pas besoin de delete.
Pour le moi le new/delete n'est pas l'inconvénient du C++ mais l'avantage. Les smart pointer, c'est très bien mais pas optimal, or l'intérêt du C++ c'est la rapidité et l'efficacité du code produit. Certains d'ailleurs refusent d'utiliser le C++ et préfèrent le C pour le fait que le C interdit d'utiliser les facilités. C'est la seul raison pour laquelle le C/C++ n'est pas mort.
Si vous n'utilisez que des smart pointer et des options très avancé, c'est que vous n'avez rien a faire en C++, utilisez plutôt du Java, vous risquerez moins de faire planter la machine. Tout l'intérêt du C++11 c'est de permettre l'utilisation de fonctions haut niveau pour les parties les moins critique et de garder l'utilisation de fonction très efficace (ancienne) et précise pour les parties critique.
Vous avez le même principe dans tous langages. Quand vous développez les couches haute de l'application ou une version de démonstration, alors vous cherchez la productivité. Mais pour les parties critique, vous devrez optimiser votre code. C'est vrai que vous soyez en C/C++ ou en Java, PHP, Python et même bash ou en utilisation de logiciel.
Quel informaticien ne double click sur un fichier pour l'ouvrir (Avec Eclipse ou OpenOffice) dans 90% des cas mais dans certains cas (c'est un gros fichier ou jeter un coup d'oeil rapide) ouvre le fichier avec Gedit (Notepad++) ou même vi/emacs pour éviter de le copier en local?
abriotde, ton commentaire est en total contradiction avec le concept de fossé sémantique de Seymour Cray.
C'est le genre d'argumentaire que j'écoutais dans ma prime jeunesse entre l'assembleur et le C.
Un bon programmeur choisi le langage le plus facile et maintenable permettant d'arriver aux objectifs, un point c'est tout.
Et le TimeToMarket explose quasiment systématiquement les performances (si ça rame, on prend une machine plus grande).
Bonjour.
Il y a une tendance visible à vouloir faire du C++, un CSharp like ou un Java like. Je pense que c'est problématique, car le C++ ne pourra jamais proposer des Frameworks aussi puissants, notamment au niveau IHM. Boost est sur la bonne voie, mais sans IHM gratuite/standard/portable, je ne vois pas l'intérêt de s'aligner sur les L4G.
abriotde a bien résumer la situation. La force du C++, c'est son passé.
Les smart pointeurs et autre garbage collector ont des failles, et ne maîtrisent rien du tout sur la gestion de l'allocation mémoire. Il vaut mieux un pointeur nu qui te pète à la tronche, le débuggeur te diras très vite où cela se trouve, plutôt que de passer des semaines avec des outils "one again" pour dépister la fuite.
En ce qui concerne l'inclusion de fichiers, Microsoft à résolu le problème depuis belle lurette. Cela s'appelle les en-têtes précompilés....
Open Source Microsoft MediaFoundation
https://github.com/mofo7777
http://jeux.developpez.com/faq/directx/?page=dshow
Les smart pointers sont tout à fait utilisables dans un contexte où les performances comptent. Et ce faisant, ils ont du code avec plus de bugs et moins de performances... J'en veux pour exemple la bibliothèque standard du C (donc quand même un truc éprouvé et sur lequel pas mal de personnes sont passées pour la corriger/l'optimiser). Il y a peu, Microsoft a réimplémenté la sienne en C++ et sans se restreindre sur les fonctionnalités du langage. Ils ont corrigé ce faisant quelques bugs/fuites mémoire, et amélioré les performances !
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.
Le C++ n'a pas de problème.
Par contre le plus gros problème de CoderGears c'est CoderGears![]()
J'ai moi même plusieurs fois tenté d'apprendre le C++ , après avoir développé en Fortran, en Java et en Php (excusez moi).
Le fait de me retrouver avec les contraintes du C (que j'avais appris par ailleurs sans pratiqué) m'a un peu dégouté d'aller plus loin.
Tant pis
Bonjour,
Ce fil de discussion m'inquiète beaucoup.
en effet, je viens du VB6 et j'attaque le C++. J'ai déjà créé une classe en C++ ANSI. J'ai étudié "Ivor Horton's Beginning Visual C++ 2008" et je lis "Pensez en C++" qui date de 2008.
Je me rends compte en lisant vos posts que toutes ces lectures sont obscolètes. Pouvez-vous me le confirmer ?
Merci
"Pensez en C++" est bien plus vieux que 2008.
Côté design, il est très intéressant, mais côté bonnes pratiques sur le C++, c'est du C++ historique -- et tu risques de te voir corriger à chaque post sur les posts -> les gens qui répondent finissent par être fainéants et ne plus vouloir prendre la peine de chercher à corriger des codes qui ont des pointeurs qui se baladent nus.
Pour les livres qui ciblent un outil, je me méfie toujours. Je te renvoie au fil qui traite des livres pour le C++: http://www.developpez.net/forums/d68...rs-livres-cpp/ (il y a peut-être un autre fil -- si /C++ Primer/ n'est pas cité, la dernière version est bien normalement)
Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...
Bonjour,
Il me semble que le C# qui est un dialecte C++ répond déjà à beaucoup des interrogations mentionnées ici :
-plus d'include
-plus de pointeur sauf à définir des portions "unsafe" dans le code
-un système de référence généralisé ...
Où situez-vous le C# par rapport au modern C++ ?
Le C++ semble être en phase de métamorphose. Il peut s'adapter sans doute à différents contextes et ainsi se partager en sous-dialecte. Cette plasticité c'est peut-être aussi ce qui fait sa force...
Je rappelle que le C# n'est plus une propriété Microsoft.
Sur le plan technique, je ne peux pas répondre (les références de C# sont comme celles de C++ ou plutôt comme celles de Java ?)
Mais :
- pas normalisé à partir de C# 3.0 (et pas vraiment portable).
- basé sur un garbage collector et non le RAII.
L'implémentation de Microsoft si ; et actuellement, il n'existe pas d'implémentation libre ou open source de la même version.
De plus, les implémentations libres ou open source implémentent le langage mais pas forcément la bibliothèque .NET (qui est la propriété de Microsoft ?)
A la base C# est bien plus proche de JAVA que de C++.
C++/CLI est un dialecte C++ mais pas C#.
Actuellement, Mono est toujours limité à C# 2.0, l'avancement est ici.
Et encore, j'aurais plutôt l'impression que dire que le C++/CLI est un dialecte de C++, c'est un peu comme dire que le C++ est un dialecte de C.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Partager