Quelles sont les différences entre les 3 programmes ci-dessous?. Est merci d'avance. p> p> 1. H1>
2. h1>
3 . h1>
4 Réponses :
Vous les deux premiers programmes sont des programmes standard C ++ Standard, tandis que le 3ème programme utilise un fichier d'en-tête non standard dans le programme 1ère regarder
à l'aide d'un espace de noms std code> apporte l'espace de noms complet
std code> dans la portée. P>
L'en-tête n'a jamais fait partie d'une norme Y C ++ et ne peut donc pas être considérée comme obsolète, qui a une signification technique spécifique en C ++.
@Neil: devx.com/tips/tip/14447 dit clairement que
-wno-déprécée de GCC. Ensuite, je ne trouve pas la raison pour laquelle
@Prason Saurav: C'est Devx.com, pas la norme.
Ce n'est pas une partie obsolète de la norme C ++, mais je discuterais, il est correct de dire que c'est une caractéristique obsolète de tout compilateur conforme aux normes.
Qui se soucie de ce que dit un lien Internet aléatoire? Les caractéristiques obsolètes de C ++ sont énumérées à l'annexe D de la norme C ++.
@Neil: oui vous êtes correct. Géré pour trouver des fonctionnalités obsolètes de C ++ à l'annexe D de la norme C ++.
Point juste cependant sur le drapeau non obscuré code>. Peut-être que "anachronistique" serait une meilleure description? En fin de compte, cela (
iostream.h code>) ne devrait tout simplement pas être utilisé avec un compilateur moderne.
En ce qui concerne le programme produit, il n'ya rien de différence - car rien dans la bibliothèque Lorsque vous iostream code> est référencé par le programme, aucune de la bibliothèque ne sera compilée par un compilateur intelligent. < / p>
#include
#include
#include
std :: code> - Il est là pour la compatibilité inverse avec des programmes utilisés la version originale de
iostream code> qui n'a pas laissé tomber le
.h code>. (Les versions
char code>'s.) P>
à l'aide de NAMESPACE STD; CODE> signifie que l'espace de noms par défaut pour les références de noms dans le fichier actuel sera
std code>, qui est l'espace de noms utilisé par la plupart des fonctions de bibliothèque standard. Bien que cela signifie que vous n'avez pas à préfixer tous les appels de bibliothèque standard avec
std :: code>, cela signifie également que vous devez faire attention à ne pas définir quoi que ce soit qui chevauche des noms de bibliothèque standard. p>
En fait, je crois iostream.h code> met les choses dans l'espace de noms global (même si aucun compilateur sous le soleil ne le fait en réalité). Je peux me tromper.
@Billy: iostream.h code> n'existe pas dans la norme C ++, de sorte qu'il ne fait rien en général; Il faudrait spécifier quelle mise en œuvre. Il s'agit d'une relique de la pré-standard C ++, de retour avant les espaces de noms, donc sur une implémentation donnée qui l'a probablement identique à celle de
#include
en utilisant code> directives exporter tous ses symboles dans l'espace de noms global.
Il y a, sur votre système, un fichier appelé "iostream" (aucune extension), dont le contenu est copié et collé (avec traitement récursif de De même, le Pour les trois exemples que vous avez donnés, ils vous donnent tous les définitions et prototypes dont vous avez besoin d'utiliser la partie iostream de la bibliothèque standard C ++, mais (2) est préférable, (1) est acceptable et (3) est obsolète. . (2) donne la commodité supplémentaire de pouvoir omettre le préfixe iostream code> est un fichier d'en-tête qui fournit des déclarations et des prototypes une interface à une interface à la bibliothèque standard C ++. P>
#include code> s) au point où vous écrire
#include
#include code> Les directives tirent toujours dans le contenu des fichiers d'en-tête, ils n'ajoutent jamais "bibliothèques". Les fichiers d'en-tête contiennent souvent des déclarations et des prototypes d'une interface avec une bibliothèque, mais les bibliothèques réelles elles-mêmes sont jointes à votre programme par la liaison, pas le compilateur. Lors de la liaison d'un programme C ++, la liaison jointe automatiquement à la bibliothèque standard C ++, à moins que vous ne le disiez pas, vous n'avez donc pas à vous soucier de cela. P>
à l'aide de noms de noms Std code> ne fait pas le travail de joindre la bibliothèque. Cette déclaration ne fait que pour que vous puissiez écrire, par exemple,
cout code> ou
chaîne code> au lieu de les qualifier comme
std :: COUT code> et
STD :: String Code>. Cela fonctionne pour n'importe quel espace de noms, mais est généralement découragé. P>
std :: code> (au coût de la réduction des noms de variable disponibles pour que vous puissiez utiliser vous-même), et (3) inclut un fichier différent appelé "iostream.h" au lieu de "iostream", qui est généralement la même chose, mais le fichier avec le .h est une relique de pré-standard C ++ et peut donc ne pas être pris en charge dans les futurs compilateurs. P>
Il y a une erreur dans NO 3 Problème avec le fichier d'en-tête P>
L'en-tête iOSTREAM.H est un en-tête non standard et n'existe pas sur toutes les plateformes. En fait, cela n'existe pas sur mon système (en utilisant g ++ et le GNU LIBSTDC ++). Donc, n'importe quel code utilisant cela ne compilerait tout simplement pas sur mon système. P>
L'en-tête iostream.h utilisé pour être courant avant la première normalisation de C ++ en 1998. Mais depuis la norme 98 utilisée
Dans le deuxième programme, je n'ai pas inclus espace de noms, alors que va-t-il se passer?
Vous devrez écrire, par exemple,
std :: cout code> au lieu de
cout code>.
Il ressemble à un devoir de l'étudiant ... n'est-ce pas?
S'il vous plaît ne devinez pas sur l'étiquette des devoirs. Ce n'est évidemment pas une question de devoirs collé par une copie, et c'est quelque chose qui pourrait raisonnablement être interrogé par quiconque apprenant la langue C ++.
Je ne suppose pas: j'avais une question vraiment i> une question similaire dans un test il y a 5 ans.