220 votes

Ce qui ' s mal avec cplusplus.com ?

C'est peut-être pas parfaitement adapté forum pour cette question, mais permettez-moi de donner un coup de feu, au risque d'être éloigné.

Il y a plusieurs références pour le C++ de la bibliothèque standard, y compris la précieuse norme ISO, MSDN, IBM, cppreference, et cplusplus. Personnellement, lors de l'écriture de C++ j'ai besoin d'une référence qui a rapide d'accès aléatoire, court temps de chargement et des exemples d'utilisation, et j'ai été trouver cplusplus.com assez utile. Cependant, j'ai entendu des avis négatifs sur ce site souvent ici, donc, je tiens à vous:

Quelles sont les erreurs, les malentendus et les mauvaises pièces de conseils donnés par cplusplus.com? Quels sont les risques de l'utiliser pour faire des choix de codage?

Permettez-moi d'ajouter ce point: je veux être en mesure de répondre à des questions ici sur DONC, avec des devis précis de la norme, et donc je voudrais afficher immédiatement utilisables par les liens, et cplusplus.com aurait été mon choix de site il n'y avait pas ce problème.


Mise à jour: Il y a eu beaucoup d'excellentes réponses, et j'ai sérieusement changé mon point de vue sur cplusplus.com. Je voudrais la liste de quelques choix résultats ici; n'hésitez pas à proposer de plus en plus (et garder l'affichage des réponses).

Le 29 juin 2011:

  • Description incorrecte de certains algorithmes (par exemple, remove).
  • Information sur le comportement des fonctions est parfois incorrect (atoi), ne parvient pas à mentionner des cas spéciaux (strncpy), ou omet des informations essentielles (itérateur invalidation).
  • Exemples contiennent obsolète code (#include).
  • L'imprécision de la terminologie est en train de faire un mauvais service aux apprenants et la communauté en général ("STL", "compilateur" vs "toolchain").
  • Incorrect et trompeur description de l' typeid mot-clé.

77voto

Nawaz Points 148870

Laissez-moi vous donner un exemple pour vous montrer comment cpluscplus.com peut se tromper.

Envisager std::remove fonction à partir d' <algorithm>.

Le fait est que,std::remove ne pas supprimer l'élément dans le conteneur. Sa parce qu' std::remove fonctionne avec une paire d'itérateurs seulement et ne sait rien sur le conteneur qui contient les éléments. En fait, il n'est pas possible pour std::remove savoir le conteneur sous-jacent, car il n'existe aucun moyen on peut aller d'une paire d'itérateurs à découvrir sur le conteneur sur lequel les itérateurs appartiennent. Donc, std::remove n'a pas vraiment de supprimer les éléments, tout simplement parce qu'il ne peut pas. La seule façon de réellement supprimer un élément d'un conteneur est d'appeler une fonction membre sur le conteneur.

Donc, si vous voulez supprimer les éléments, puis utiliser Erase-Remove Idiome:

 v.erase(std::remove(v.begin(), v.end(), 10), v.end()); 

Mais cplusplus.com donne incorrect d'informations sur l' std::remove. Il dit

Notez que cette fonction ne modifie pas les éléments passé la fin de nouveau, qui gardent leurs anciennes valeurs et sont toujours accessibles.

qui n'est pas correct. L'itérateur dans la gamme [new_end, old_end) est encore dereferenceable, mais cela ne signifie PAS qu'ils conserver les anciennes valeurs et sont toujours accessibles. Ils ne sont pas spécifiés.


De même, cplusplus.com donne incorrect d'informations sur l' list::remove . Il est dit,

L'avis d'un global de l'algorithme de la fonction, supprimer, existe avec un comportement similaire , mais entre deux itérateurs.

ce qui est complètement faux. Le mondial de supprimer à savoir std::remove n'est pas semblable à l' list::remove, comme nous l'avons vu que l'ancien n'a PAS vraiment d'enlever les éléments du conteneur car il ne peut pas, tandis que le second (la fonction de membre) n'a vraiment supprimer les éléments , car il peut.

Cette réponse est copié à partir de mon autre réponse dans la rubrique suivante, avec peu de modifications:

Remarque: Depuis que je suis tombé sur cette récemment, lorsque j'étais répondre dans le sujet ci-dessus, je m'en souviens. Il y a beaucoup d'erreurs qui j'ai rencontré au cours des deux dernières années, je ne m'en souviens pas. Je pourrais ajouter quelques plus tard, si je viens à travers de nouveau.

41voto

David Hammen Points 17912

Je vais donner un avis légèrement le contraire. Il y a beaucoup de bonnes informations sur cplusplus.com. Prendre à elle à la mort, et oui, bien sûr, il a ses problèmes, mais ce site ne marche pas? Certainement pas ce site. Les gens qui vivent dans des maisons de verre ne devraient pas jeter des pierres. Il y a beaucoup de désinformation ici, trop. Il y a des réponses acceptées qui sont complètement erroné, downvoted réponses (négatives!) qui sont spot-on corriger.

Un problème avec cplusplus.com c'est que c'est un site fermé; il en va de même pour la plupart des autres sites de référence mentionné. Cela va à l'encontre de la communauté d'un site comme le Débordement de la Pile. L'acquisition de la capacité à faire confiance modifications ne prend pas très longtemps, et même les plus récents de débutants peuvent facilement faire des suggestions d'amélioration. Comparez cplusplus.com. Vous êtes un éternel débutant si vous n'êtes pas sur de leur personnel. Même si vous êtes un membre clé de WG21, vous devez passer par leur e-mail mécanisme de rapport si vous voyez un bug quelque part dans ce site. Anathème!

Une solution serait, pour nous, ce site à développer notre propre référence C++. Ce serait prendre un peu de travail. Nous devons être prudents de ne pas être trop pédant / trop technique, il est évident que cplusplus.com emploie au moins un peu de rédacteurs techniques qui gardent les pédants à la baie. Nous aurions de garder l'information bien organisée; la FAQ ici ne sont pas bien organisés. Nous aimerions également avoir à être très prudent de ne pas le bec trop directement à partir de la norme, c'est illégal.

27voto

Comme Nawaz, j'aurais de la difficulté à proposer une liste exhaustive des erreurs spécifiques. Les deux il identifie en sont de bons exemples.

Le long légèrement différentes lignes, je tiens à signaler que cplusplus.com favorise les mauvaises pratiques, telles que:

Je trouve aussi l'incohérence du codage de style dans les exemples à être une source de distraction, et la documentation en général pour être présenté dans une incertaine et incohérente; certains de la référence est présenté comme de la prose, et d'autres pas.

Il mélange le terme "compilateur" avec "toolchain".

Il semble varier si la complexité des opérations et algorithmes sur les conteneurs sont documentées et de quelle manière. Certains itérateur invalidation règles sont soit difficiles à trouver ou apparemment laissé entièrement.

Je n'utilise pas le site moi-même comme un guide de référence rapide parce que je sais C++ assez bien pour contourner les erreurs et omissions (et parce que je trouve la mise en page et la facilité de navigation sur le site internet de qualité supérieure à d'autres références), mais je ne recommanderais jamais à la langue des nouveaux arrivants et, en fait, de recommander à l'encontre de son utilisation lors de l'engagement dans les conseils de remise sur un Débordement de Pile.

16voto

Steve Jessop Points 166970

http://www.Cplusplus.com/Reference/clibrary/CString/strncpy/

Omet de mentionner que « si la copie a lieu entre les objets qui se chevauchent, le comportement est indéfini. » (4.11.2.4 dans la norme C89. Je n’ai pas de remettre une copie de C90, qui est ce que C ++03 désigne en fait, mais qu’ils sont censés ne diffèrent que sur des choses comme la numérotation de la page.)

10voto

Alok Save Points 115848

La documentation donnée par cplusplus.com est souvent incorrecte ou incomplète.

Une fois qu'un tel exemple est ,l' atoi de la documentation sur cplusplus.com.

atoi
Il n'y a aucune mention sur un Comportement non défini lors de l'utilisation de la fonction,

Conformément à la norme "Si la valeur numérique de la chaîne ne peut pas être représenté dans le type int, alors le comportement est indéfini".

Mais cplusplus.com la documentation seulement les etats,"Si la valeur correcte est hors de la plage de représentable, valeurs, INT_MAX ou INT_MIN est retourné.".

C'est purement incorrect.

Beaucoup de codes sources exemples donnés sur cplusplus.com sont incorrectes.
Beaucoup de débutants à la recherche de ces références sont amenés à faire des ballant des erreurs.

Pour citer un exemple:

EDIT: L'exemple que j'ai cité précédemment était incorrecte.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X