Aucun amour C++ lorsqu’il s’agit de la ligne « fonctions cachées de » des questions ? Pensé que je jetterais ce là-bas. Quelles sont certaines des fonctionnalités cachées du C++ ?
Réponses
Trop de publicités?Je suis d'accord avec la plupart des postes: C++ est multi-paradigme de la langue, de sorte que le "caché" vous propose (autres que les "undefined comportements" que vous devriez éviter à tout prix) sont habiles de l'utilisation des installations.
La plupart de ces installations ne sont pas des fonctionnalités intégrées de la langue, mais de la bibliothèque.
Le plus important est le RAII, souvent ignoré pendant des années par les développeurs C++ en provenance de la C monde. La surcharge d'opérateur est souvent mal compris fonctionnalité qui permettra à la fois de la matrice de comportement (indice de l'opérateur), des opérations de type pointeur (pointeurs intelligents) et construire-dans des opérations de type (multiplication des matrices.
L'utilisation de l' exception est souvent difficile, mais avec un peu de travail, peut produire vraiment robuste code par le biais de l'exception de sécurité spécifications (y compris le code qui ne manquera pas, ou qui ont un commit comme caractéristiques qui est la volonté de réussir, ou de revenir à son état d'origine).
Le plus célèbre de "caché" de C++ est le modèle de la métaprogrammation, car il vous permet d'avoir votre programme partiellement (ou totalement) exécutée au moment de la compilation au lieu de l'exécution. C'est difficile, cependant, et vous devez avoir une connaissance solide sur les modèles avant de l'essayer.
D'autres utilisations de l'multiples paradigme de produire des "modes de programmation" à l'extérieur de C++de l'ancêtre, qui est, C.
En utilisant les foncteurs, vous pouvez simuler des fonctions, avec le type supplémentaire de sécurité et d'être dynamique. À l'aide de la commande de motif, vous pouvez retarder l'exécution de code. La plupart des autres modèles de conception peut être facilement et efficacement mis en œuvre en C++ pour produire d'autres styles de codage pas censé être à l'intérieur de la liste "officielle C++ paradigmes".
En utilisant des modèles, vous pouvez produire du code qui fonctionne sur la plupart des types, y compris pas celle que vous avez pensé au premier abord. Vous pouvez augmenter la sécurité de type,trop (comme un système automatisé de typesafe malloc/realloc, free). Objet C++ caractéristiques sont vraiment puissants (et donc dangereux si utilisé sans précaution), mais même de la dynamique polymorphisme avoir sa version statique en C++: le PROGRAMME de formation itinérante.
J'ai trouvé que la plupart des "Effective C++"-type de livres de Scott Meyers ou "Exceptionnel C++"-type de livres à partir de Herb Sutter à être à la fois facile à lire et assez trésors de l'info, connus et moins connus fonctionnalités de C++.
Parmi mes préférées est celle qui devrait rendre les cheveux de tout programmeur Java montée de l'horreur: En C++, les plus méthode orientée objet pour ajouter une fonction à un objet par l'intermédiaire d'un non-membre non-ami de fonction, au lieu d'un membre de la fonction (c'est à dire de la méthode de classe), parce que:
En C++, une classe de l'interface est à la fois les fonctions et les non-fonctions de membre dans le même espace de noms
non-ami non membre les fonctions n'ont pas un accès privilégié à la classe interne. En tant que tel, à l'aide d'une fonction de membre de plus d'un non-membre non-ami, affaiblira la classe' encapsulation.
Ce qui ne manque jamais de surprendre même les développeurs expérimentés.
(Source: Entre autres, Herb Sutter en ligne le Gourou de la Semaine #84: http://www.gotw.ca/gotw/084.htm )
Une fonctionnalité de langage que je considère être un peu cachés, parce que j’avais jamais entendu parler tout au long de mon temps ensemble à l’école, est l’alias d’espace de noms. Il n’a pas été porté à mon attention jusqu'à ce que je suis tombé sur des exemples pour cela dans la documentation de Poussée. Bien sûr, maintenant que je sais que vous pouvez le trouver dans n’importe quel référence C++ standard.