2012-03-11 32 views
9

Giáo sư khoa học máy tính của tôi muốn chúng tôi tìm thấy tuyên bố của cout. Tôi đã biên soạn một chương trình Hello world đơn giản sử dụng g ++ và tham số -E. Đây là những gì hello.cpp của tôi trông giống như:Cout được khai báo ở đâu?

#include <iostream> 

using namespace std; 

int main(){ 

    string name=""; 

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

    cin >> name; 

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

    return 0; 

} 

lệnh biên dịch của tôi:

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

Trong hello.p, tôi chạy một tìm kiếm trong VIM, như vậy:

:/cout 

tôi xem dòng sau:

extern ostream cout; 

Đó là t anh tuyên bố là cout và là cout một phiên bản của lớp học ostream?

Edit:

tờ khai wcout là gì có gì? Nếu tôi nhớ lại chính xác chữ "w" là viết tắt của "rộng", nhưng tôi không biết ý nghĩa của nó. wcout và số wostream là gì?

+0

Tôi sẵn sàng đoán một nơi nào đó trong mã được truy cập vào tệp thi hành của bạn khi bạn liên kết với iOStream. – Kaslai

+0

@Aslai - Tôi đã rút ra một dòng từ mã đó. Tôi muốn biết nếu đó là nó. – Moshe

+0

Hãy thử cách này: http://www.cplusplus.com/ - nhập 'cout' vào hộp tìm kiếm. –

Trả lời

8

Có, đó thực sự là khai báo của std::cout, được tìm thấy bên trong tiêu đề <iostream>.

Phần tiêu chuẩn có liên quan có thể được tìm thấy trong §27.4.1 [iostream.objects.overview]:

Tiêu đề <iostream> tóm tắt

#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 Tiêu đề <iostream> tuyên bố các đối tượng liên kết đối tượng với các dòng C tiêu chuẩn quy định bởi các hàm được khai báo trong <cstdio> (27.9.2) và bao gồm tất cả các tiêu đề cần thiết để sử dụng các đối tượng này S.

+0

Cảm ơn. Tâm trí làm rõ chỉnh sửa của tôi, xin vui lòng? – Moshe

+0

@Moshe: 'wcout' chỉ là' basic_ostream' chuyên về 'wchar_t', có nghĩa là UTF-16 trên Windows và UTF-8 trên Linux IIRC. – Xeo

2

Đó có phải là tuyên bố của cout và là một cá thể của lớp ostream không?

Vâng, đó là tuyên bố của std::cout và có thể là std::ostream. Nó được khai báo extern để đối tượng chỉ được tạo một lần ngay cả khi tiêu đề được bao gồm trong nhiều đơn vị dịch.

+1

Đừng quên phần 'namespace std {...}'. Đó là 'std :: ostream std :: cout', không phải' :: ostream :: cout'. – moshbear

Các vấn đề liên quan