pour utiliser COUT code>, j'ai besoin de spécifier les deux:
using namespace std;
4 Réponses :
Cout est une instance définie dans le fichier Il pourrait exister un autre pour éviter le iostream code> est le nom du fichier dans lequel Cout est défini.
D'autre part,
std code> est un espace de noms, équivalent (dans un sens) au package de Java.
iostream code>, à l'intérieur du std Espace de noms. p>
COUT code>, dans un autre espace de noms. Donc, pour indiquer que vous souhaitez utiliser l'instance code> code> à partir de l'espace de noms code> std code>, vous devez écrire p>
std :: COUT code >, indiquant la portée. p>
std :: code> partout, vous pouvez utiliser le
à l'aide de la clause code>. P>
namespace std{
ostream cout;
}
namespace other{
float cout;//instance of another type.
}
@TOM: Quand j'ai déjà inclus le fichier ( iostream code>), j'ai spécifié la définition de
cout code> à utiliser. Maintenant, le compilateur sait quelle définition à utiliser. Alors, quel est le problème alors. Je suis toujours confondu de la raison pour laquelle j'ai besoin de dire que c'est dans
std code> Espace de noms. Cela aurait dû être nécessaire s'il y avait une certaine confusion. Ici, il n'y a pas de confusion car il n'y a qu'une seule définition de
Cout code>.
@CAMBR: Non, vous avez spécifié une définition de COUT code> à utiliser. Il n'y a aucune raison pour ne pas définir
int Cout; code> après, bien que ce ne soit pas une bonne idée. Sans doute, la norme C ++ aurait pu être ignorée que les espaces de noms soient ignorés s'il n'y a qu'un espace de noms avec un symbole donné, mais ce n'est pas le cas, et je ne peux pas penser à une langue à l'aide d'espaces de noms où il fait.
Tous les symboles de iostream sont dans l'espace de noms cout code> est défini logiquement dans iostream. Par logiquement, je veux dire que cela peut réellement être dans le fichier iOSTREAM ou que cela peut être dans certains fichiers inclus dans iostream. De toute façon, y compris iostream est la bonne façon d'obtenir la définition de
COUT code>.
std code>. Pour utiliser le symbole
Cout code>, vous devez dire au compilateur comment le trouver (c'est-à-dire quel espace de noms). Vous avez quelques choix: p>
Le Vous n'avez pas besoin de #include
à l'aide de NAMESPACE STD; code>. Cela vous permet simplement d'utiliser le sténographie
COUT code> et
endl code> et similaire, plutôt que
std :: cou code> et
std :: endl code> où l'espace de noms est explicite. Personnellement, je préfère ne pas utiliser
à l'aide de l'espace de noms ... code> car cela nécessite que je sois explicite à mon sens, bien que cela soit certes plus verbeux. P>
Le compromis est en utilisant std :: cout; Utilisation de std :: endl; code>, après quoi vous pouvez utiliser
COUT code> et
endl code> sans qualification, sans apporter l'espace de noms code> std code> dans l'espace de noms global.
Si votre implémentation C ++ utilise des fichiers d'en-tête de style C (beaucoup de), un fichier contient quelque chose de similaire à: En disant p> Vous indiquez au compilateur que vous souhaitez que vous recherchiez dans l'espace de noms Std en plus de l'espace de noms global lors de la recherche de noms.
Si le compilateur voit la ligne source: p> quelque part après le à l'aide de namepace std; code> ligne, il recherchera
foo code> Dans divers espaces de noms différents (semblables aux champs) jusqu'à ce qu'il trouve une FOO qui répond aux exigences de cette ligne. Il recherche des espaces de noms dans un certain ordre. D'abord, il ressemble à la portée locale (qui est vraiment un espace de noms non nommé), puis la prochaine portée locale jusqu'à fin et plus jusqu'à l'extérieur d'une fonction, puis sur les choses nommées par l'objet enfermantes (méthodes, dans ce cas), puis à Noms globaux (fonctions, dans ce cas, sauf si vous ignorez et surchargé () que j'ignore), puis à l'espace de noms STD si vous avez utilisé le
à l'aide de NAMESPACE STD; CODE> LIGNE. Je peux avoir les deux derniers dans le mauvais ordre (STD peut être recherché avant que Global), mais vous devriez éviter d'écrire du code qui dépend de cela. P> P>
@Neil alors quel est le but de si? Ne poser que des questions qui n'ont aucun moyen de répondre en lisant un livre ou en recherchant sur Internet?
@Neil Butterworth: D'accord! Pas plus de questions stupides après celui-ci, sans lire les concepts d'un livre.
@Kevin quiconque qui pense qu'ils peuvent apprendre c ++ en posant des questions sur telle-même se trompent et en gaspillant notre temps.
Je pense que la question est appropriée pour. Cela n'était donc pas destiné à être réservé uniquement à des questions obscures / avancées.