2012-03-11 21 views
9

Il mio professore di scienze informatiche vuole che troviamo la dichiarazione di cout. Ho compilato un semplice programma Hello mondo usando g ++ e il parametro -E. Ecco quello che sembra il mio hello.cpp come:Dove viene dichiarato cout?

#include <iostream> 

using namespace std; 

int main(){ 

    string name=""; 

    cout << "Good morning! What's your name?"; 

    cin >> name; 

    cout << "Hello " << name << ".\n"; 

    return 0; 

} 

mio comando di compilazione:

g++ -E hello.cpp > hello.p 

In hello.p, ho eseguito una ricerca in VIM, in questo modo:

:/cout 

I vedere la riga seguente:

extern ostream cout; 

È che t la dichiarazione di cout ed è cout un'istanza della classe ostream?

Edit:

Qual è la dichiarazione wcout lì per? Se ricordo bene la lettera "w" sta per "wide", ma non so quale implicazione abbia. Che cos'è un wcout e un wostream?

+0

Sarei disposto a indovinare da qualche parte nel codice che viene aggiunto al file eseguibile quando si collega a IOStream. – Kaslai

+0

@Aslai - Ho tirato fuori una riga da quel codice. Voglio sapere se è tutto. – Moshe

+0

Prova questo: http://www.cplusplus.com/ - digita 'cout' nella casella di ricerca. –

risposta

8

Sì, questa è effettivamente la dichiarazione di std::cout, trovata all'interno dell'intestazione <iostream>.

La parte relativa norma si trovano in §27.4.1 [iostream.objects.overview]:

Header <iostream> sinossi

#include <ios> 
#include <streambuf> 
#include <istream> 
#include <ostream> 

namespace std { 
    extern istream cin; 
    extern ostream cout; 
    extern ostream cerr; 
    extern ostream clog; 
    extern wistream wcin; 
    extern wostream wcout; 
    extern wostream wcerr; 
    extern wostream wclog; 
} 

p1 L'intestazione <iostream> dichiara oggetti che associano gli oggetti con i flussi di C standard fornite per dalle funzioni dichiarate in <cstdio> (27.9.2) e include tutte le intestazioni necessarie per utilizzare questi oggetti S.

+0

Grazie. Mente che chiarisce le mie modifiche, per favore? – Moshe

+0

@Moshe: 'wcout' è solo un' basic_ostream' specializzato in 'wchar_t', che significa UTF-16 su Windows e UTF-8 su Linux IIRC. – Xeo

2

È la dichiarazione di cout, ed è cout un'istanza della classe ostream?

Sì, questa è la dichiarazione di std::cout e sì, è un esempio di std::ostream. Viene dichiarato extern in modo che l'oggetto venga creato una sola volta anche se l'intestazione è inclusa in più unità di traduzione.

+1

Non dimenticare la parte 'namespace std {...}'. È 'std :: ostream std :: cout', non' :: ostream :: cout'. – moshbear