std::cout, std::wcout
| ヘッダ <iostream> で定義 |
||
| extern std::ostream cout; |
(1) | |
| extern std::wostream wcout; |
(2) | |
グローバルオブジェクト std::cout と std::wcout は、標準C出力ストリーム stdout に関連付けられた、実装定義の型(std::streambuf から派生)のストリームバッファへの出力を制御します。
これらのオブジェクトは、型 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 は「文字出力」を意味し、wcout は「ワイド文字出力」を意味します。
テンプレート化された変数の動的初期化は順序付けられていないため、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 の public メンバクラス) | |
| 標準Cエラー ストリーム stderr にバッファリングなしで書き込む (グローバルオブジェクト) | |
| 標準Cエラー ストリーム stderr に書き込む (グローバルオブジェクト) | |
| 入力ストリームに関連付けられた FILE* 型の式 出力ストリームに関連付けられた FILE* 型の式 エラー出力ストリームに関連付けられた FILE* 型の式 (マクロ定数) |