std::cout, std::wcout
定義於標頭檔案 <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”指的是“字元”(stroustrup.com FAQ);cout
意為“字元輸出”,wcout
意為“寬字元輸出”。
由於動態初始化模板化變數是無序的,因此不能保證在這些變數的初始化開始之前 std::cout
已初始化為可用狀態,除非已構造型別為 std::ios_base::Init 的物件。
[編輯] 示例
#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* 型別的表示式 (宏常量) |