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 常見問題集);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* 型別表示式 (巨集常數) |