Voici:
#include <iostream>
int main()
{
std::endl(std::operator<<(std::cout, "Hello world!"));
}
En l'écrivant de cette façon, nous évitons l'ADL sujet aux erreurs ainsi que l'utilisation de directives et de déclarations.
C'est censé être une réponse sarcastique. :-RÉ
Je suis avec Herb Sutter sur Google sur celui-ci. Des normes de codage C ++:
Vous pouvez et devez utiliser l' espace de noms en utilisant des déclarations et directives généreusement dans vos dossiers de mise en œuvre après les directives #include et se sentir bien à ce sujet. Malgré les affirmations répétées du contraire, les espaces de noms utilisant des déclarations et des directives ne sont pas mauvais et ils ne vont pas à l'encontre de l'objectif des espaces de noms. C'est plutôt ce qui rend les espaces de noms utilisables .
Vous pouvez être obsédé par les conflits d'espace de noms potentiels qui ne se manifesteront probablement jamais et ne seront probablement pas difficiles à résoudre dans un événement aussi rare sur le plan astronomique en évitant soigneusement les using
directives et en spécifiant explicitement chaque chose que vous utilisez (jusqu'aux opérateurs) avec des using
déclarations, ou allez-y et commencez using namespace std
. Je recommande ce dernier du point de vue de la productivité.
La plupart des manuels c ++ enseignent aux débutants à utiliser l'espace de noms std; propagent-ils de mauvaises pratiques de codage?
Le contraire si vous me le demandez, et je crois que Sutter ci-dessus est d'accord.
Maintenant, au cours de ma carrière, j'ai rencontré environ 3 conflits d'espace de noms au total en conséquence directe de using
directives dans des bases de code couvrant des dizaines de millions de LOC. Cependant, dans les 3 cas, ils se trouvaient dans des fichiers source qui s'étalaient sur plus de 50 000 lignes de code hérité, initialement écrites en C puis bâtardées en C ++, effectuant une liste éclectique massive de fonctions disparates, y compris les en-têtes d'une douzaine de bibliothèques différentes, et ayant une liste épique de #includes
cela s'étalant sur une page. Malgré le désordre épique, ils n'ont pas été trop difficiles à réparer car ils ont causé des erreurs de build sur OSX (le seul OS où le code n'a pas pu être construit), pas des bugs d'exécution. N'organisez pas votre code de cette façon cauchemardesque et ça devrait aller.
Cela dit, évitez les using
directives et les déclarations dans les fichiers d'en-tête. C'est tout simplement retardé. Mais pour les fichiers source, et en particulier ceux qui n'ont pas une page entière remplie de #include
directives, je dirais ne pas transpirer si vous ne travaillez pas pour Google.