En C ++, des fonctionnalités comme les exceptions ont un impact sur l'ensemble de votre programme: vous pouvez soit les désactiver dans l'ensemble de votre programme , soit vous devez les gérer tout au long de votre code. Comme le dit un célèbre article sur le rapport C ++ :
Contre-intuitivement, la partie difficile du codage des exceptions n'est pas les lancers et les captures explicites. La partie vraiment difficile de l'utilisation des exceptions est d'écrire tout le code intermédiaire de telle manière qu'une exception arbitraire puisse se propager de son site de lancement à son gestionnaire, en arrivant en toute sécurité et sans endommager d'autres parties du programme en cours de route.
Étant donné que même new
lève des exceptions, chaque fonction doit fournir une sécurité d'exception de base - à moins qu'elle n'appelle que des fonctions qui garantissent de ne lever aucune exception - à moins que vous ne désactiviez complètement les exceptions dans l'ensemble de votre projet .
Par conséquent, les exceptions sont une fonctionnalité «programme complet» ou «équipe complète», car elles doivent être comprises par tous les membres d'une équipe qui les utilisent. Mais toutes les fonctionnalités C ++ ne sont pas comme ça, pour autant que je sache.
Un exemple possible est que si je n'obtiens pas de modèles mais que je ne les utilise pas, je pourrai toujours écrire le C ++ correct - ou pas? Je peux même faire appel sort
à un tableau d'entiers et profiter de son incroyable avantage de vitesse par rapport à. C qsort
(car aucun pointeur de fonction n'est appelé), sans risquer de bugs - ou pas? Il semble que les modèles ne soient pas «toute l'équipe».
Existe-t-il d'autres fonctionnalités C ++ qui ont un impact sur le code qui ne les utilise pas directement et sont donc "toute l'équipe"? Je suis particulièrement intéressé par les fonctionnalités non présentes en C.
Mise à jour : je recherche en particulier des fonctionnalités où il n'y a pas de signe imposé par la langue dont vous devez être conscient. La première réponse que j'ai reçue a mentionné const-correctness, qui est également toute l'équipe, donc tout le monde doit en savoir plus; cependant, AFAICS, cela ne vous affectera que si vous appelez une fonction qui est marquée const
, et le compilateur vous empêchera de l'appeler sur des objets non const, donc vous obtenez quelque chose pour Google. À des exceptions près, vous n'obtenez même pas cela; de plus, ils sont toujours utilisés dès que vous les utilisez new
, les exceptions sont donc plus "insidieuses". Comme je ne peux pas formuler cela objectivement, j'apprécierai toute fonctionnalité de toute l'équipe.
Mise à jour 2 : au lieu de la fonctionnalité C ++, j'aurais dû écrire quelque chose comme "Fonction spécifique C ++", pour exclure des choses comme le multithreading qui s'appliquent à une grande quantité de langages de programmation traditionnels.
Annexe: Pourquoi cette question est objective (si vous vous demandez)
Le C ++ est un langage complexe, donc de nombreux projets ou guides de codage essaient de sélectionner des fonctionnalités C ++ "simples", et de nombreuses personnes essaient d'inclure ou d'exclure certaines selon des critères principalement subjectifs. Les questions à ce sujet sont régulièrement fermées à juste titre ici sur SO.
Ci-dessus, au lieu de cela, j'ai défini (aussi précisément que possible) ce qu'est une fonctionnalité de langage "toute l'équipe", donne un exemple (exceptions), ainsi que de nombreuses preuves à l'appui dans la littérature sur C ++, et demande des fonctionnalités pour toute l'équipe en C ++ au-delà des exceptions.
Le fait de savoir si vous devez utiliser les fonctionnalités de "toute l'équipe" ou s'il s'agit d'un concept pertinent peut être subjectif - mais cela signifie seulement que l'importance de cette question est subjective, comme toujours.