2012-03-11 72 views
9

Mi profesor de ciencias de la computación quiere que encontremos la declaración de cout. He compilado un sencillo programa de Hello World usando g ++ y el parámetro -E. Esto es lo que se ve mi hello.cpp como:¿Dónde se declara 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; 

} 

Mi mandato de compilación:

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

En hello.p, me encontré con una búsqueda en VIM, así:

:/cout 

I vea la siguiente línea:

extern ostream cout; 

Es que t La declaración de cout, y es cout una instancia de la clase ostream?

Editar:

¿Cuál es la declaración wcout allí para? Si recuerdo correctamente, la letra "w" significa "ancho", pero no sé qué implicación tiene. ¿Qué es un wcout y un wostream?

+0

Estaría dispuesto a adivinar en alguna parte del código que se pega al ejecutable cuando se vincula con IOStream. – Kaslai

+0

@Aslai - He sacado una línea de ese código. Quiero saber si eso es todo. – Moshe

+0

Pruebe esto: http://www.cplusplus.com/ - escriba 'cout' en el cuadro de búsqueda. –

Respuesta

8

Sí, esa es de hecho la declaración de std::cout, que se encuentra dentro del encabezado <iostream>.

La parte norma pertinente se puede encontrar en §27.4.1 [iostream.objects.overview]:

Cabecera <iostream> sinopsis

#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 La cabecera <iostream> declara objetos que se asocian objetos con los flujos estándares C previstas por las funciones declaradas en <cstdio> (27.9.2), e incluye todos los encabezados necesarios para usar estos objetos s.

+0

Gracias. ¿Te importa aclarar mis ediciones, por favor? – Moshe

+0

@Moshe: 'wcout' es solo un' basic_ostream' especializado en 'wchar_t', lo que significa UTF-16 en Windows y UTF-8 en Linux IIRC. – Xeo

2

¿Es esa la declaración de cout, y es cout una instancia de la clase ostream?

Sí, esa es la declaración de std::cout y sí que es una instancia de std::ostream. Se declara extern para que el objeto solo se cree una vez, incluso si el encabezado está incluido en varias unidades de traducción.

+1

No olvide la parte 'namespace std {...}'. Es 'std :: ostream std :: cout', no' :: ostream :: cout'. – moshbear