2012-03-11 13 views
9

私のコンピュータ科学の教授は、coutの宣言を見つけることを望んでいます。私はg ++と-Eパラメータを使って簡単なHello worldプログラムをコンパイルしました。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; 

} 

私のコンパイルコマンド:ここに私のHELLO.CPPは次のよ​​うになります

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

、私のようなので、VIMで検索を実行しました:

:/cout 

私は次の行を参照してください。

extern ostream cout; 

これはありません彼の宣言はcoutであり、coutostreamクラスのインスタンスですか?

編集:

ためそこwcout宣言は何ですか?私が正しく思い出すと、「w」という文字は「ワイド」を意味しますが、どのような意味があるのか​​わかりません。 wcoutwostreamとは何ですか?

+0

私は、IOStreamとリンクするときにあなたの実行可能ファイルにタックされるコードのどこかで推測したいと思います。 – Kaslai

+0

@Aslai - 私はそのコードから線を引いた。私はそれがそれであるかどうか知りたい。 – Moshe

+0

これを試してください:http://www.cplusplus.com/ - 検索ボックスに 'cout'と入力してください。 –

答えて

8

はい、それは<iostream>ヘッダーの内側にある、実際にはstd::coutの宣言です。

関連標準部分が§27.4.1 [iostream.objects.overview]に見出すことができる:

ヘッダ<iostream>シノプシス

#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; 
} 

ヘッダ<iostream>をするために設けられ、標準Cストリームとオブジェクトを関連付けるオブジェクトを宣言P1 <cstdio>(27.9.2)で宣言された関数によって呼び出され、これらのオブジェクトを使用するために必要なすべてのヘッダを含みますs。

+0

ありがとうございます。私の編集内容を明確にしてください。 – Moshe

+0

@Moshe: 'wcout'は' wchar_t'に特化した 'basic_ostream'です。これはWindowsではUTF-16、Linux IIRCではUTF-8を意味します。 – Xeo

2

これはcoutの宣言であり、coutはostreamクラスのインスタンスですか?

はい、それはstd::coutの宣言であり、はい、それはstd::ostreamのインスタンスです。 externと宣言され、ヘッダーが複数の翻訳単位に含まれていてもオブジェクトが1回だけ作成されます。

+1

'namespace std {...}'の部分を忘れないでください。 ':: ostream :: cout'ではなく' std :: ostream std :: cout'です。 – moshbear

関連する問題