2012-03-11 23 views
9

Mój profesor informatyki chce, abyśmy znaleźli deklarację cout. Zrobiłem prosty program Hello world, używając g ++ i parametru -E. Oto co moja hello.cpp wygląda następująco:Gdzie jest zgłaszane 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; 

} 

Moja komenda kompilacji:

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

W hello.p, wpadłem wyszukiwania w VIM, tak:

:/cout 

I patrz następująca linia:

extern ostream cout; 

Czy to jest t deklaracja cout i jest cout instancją klasy ostream?

Edit:

Co znajduje się deklaracja wcout tam? Jeśli dobrze pamiętam, litera "w" oznacza "szeroki", ale nie wiem, co to oznacza. Co to jest wcout i wostream?

+0

Chciałbym zgadywać gdzieś w kodzie, który zostanie dołączony do twojego pliku wykonywalnego, kiedy połączysz się z IOStream. – Kaslai

+0

@Aslai - Wyciągnąłem linię z tego kodu. Chcę wiedzieć, czy to wszystko. – Moshe

+0

Spróbuj tego: http://www.cplusplus.com/ - wpisz 'cout' w polu wyszukiwania. –

Odpowiedz

8

Tak, to jest rzeczywiście deklaracja std::cout, znaleziona w nagłówku <iostream>.

Odpowiednia część Standardowe metody można znaleźć w §27.4.1 [iostream.objects.overview]:

nagłówka <iostream> streszczenie

#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 nagłówek <iostream> deklaruje obiekty, które wiążą się obiektów z standardowe strumienie C przewidzianego według funkcji zadeklarowanych w <cstdio> (27.9.2) i zawiera wszystkie nagłówki niezbędne do użycia tych obiektów s.

+0

Dzięki. Umysł wyjaśniający moje zmiany, proszę? – Moshe

+0

@Moshe: 'wcout' to po prostu' basic_ostream' specjalizujący się w 'wchar_t', co oznacza UTF-16 w Windows i UTF-8 w Linux IIRC. – Xeo

2

Czy to jest deklaracja cout, i jest przykładem instancji klasy ostream?

Tak, jest to deklaracja std::cout i tak, jest to instancja std::ostream. Jest zadeklarowany jako extern, więc obiekt jest tworzony tylko raz, nawet jeśli nagłówek jest zawarty w wielu jednostkach tłumaczeniowych.

+1

Nie zapomnij o części 'namespace std {...}'. Jest to 'std :: ostream std :: cout', a nie' :: ostream :: cout'. – moshbear