Namespaces
Variants

std:: cout, std:: wcout

From cppreference.net
< cpp ‎ | io
定義済みヘッダー <iostream>
extern std:: ostream cout ;
(1)
extern std:: wostream wcout ;
(2)

グローバルオブジェクト std::cout および std::wcout は、実装定義の型( std::streambuf から派生)のストリームバッファへの出力を制御し、標準C出力ストリーム stdout に関連付けられています。

これらのオブジェクトは、型 std::ios_base::Init のオブジェクトが構築される最初の時点で初期化されることが保証されており、 順序付けられた初期化 を持つ静的オブジェクトのコンストラクタおよびデストラクタ内で使用可能です (オブジェクトが定義される前に <iostream> がインクルードされている限り)。

std :: ios_base :: sync_with_stdio ( false ) が発行されていない限り、これらのオブジェクトに対して書式付きおよび書式なし出力の両方について、複数のスレッドから同時にアクセスしても安全です。

std::cin の仕様により、 std:: cin . tie ( ) & std :: cout を返します。これは、 std::cin に対するあらゆる入力操作が std :: cout . flush ( ) を実行することを意味します( std::basic_istream::sentry のコンストラクタ経由)。同様に、 std:: wcin . tie ( ) & std :: wcout を返します。

std::cerr の仕様により、 std:: cerr . tie ( ) & std :: cout を返します。これは、 std::cerr に対する出力操作が std :: cout . flush ( ) を実行することを意味します( std::basic_ostream::sentry のコンストラクタ経由)。同様に、 std:: wcerr . tie ( ) & std :: wcout を返します。 (C++11以降)

注記

名前の「c」は「文字(character)」を指します( stroustrup.com FAQ ); cout は「文字出力(character output)」を意味し、 wcout は「ワイド文字出力(wide character output)」を意味します。

テンプレート化された変数の 動的初期化 は順序付けられていないため、 std::ios_base::Init 型のオブジェクトが構築されていない限り、そのような変数の初期化が開始される前に std::cout が使用可能な状態に初期化されていることは保証されません。

#include <iostream>
struct Foo
{
    int n;
    Foo()
    {
        std::cout << "static constructor\n";
    }
    ~Foo()
    {
        std::cout << "static destructor\n";
    }
};
Foo f; // static object
int main()
{
    std::cout << "main function\n";
}

出力:

static constructor
main function
static destructor

関連項目

標準ストリームオブジェクトを初期化する
( std::ios_base の公開メンバクラス)
標準Cエラーストリーム stderr への書き込み、バッファリングなし
(グローバルオブジェクト)
標準Cエラーストリーム stderr への書き込み
(グローバルオブジェクト)
入力ストリームに関連付けられた FILE * 型の式
出力ストリームに関連付けられた FILE * 型の式
エラー出力ストリームに関連付けられた FILE * 型の式
(マクロ定数)