許多教材和開發者誤以為 cout << ends 輸出空格,實際上它輸出的是空字符 '\0'(ASCII 0)。
inline basic_ostream>& ends(basic_ostream >& os) { os.put('\0'); return os; }
源碼明確顯示:ends 只是向流中寫入一個 '\0' 字符。
這取決於操作系統對 '\0' 的顯示處理差異:
cout << "a" << ends << "b" 顯示 a bab#includeusing namespace std; int main() { cout << "ddd" << '\0' << "dsad" << endl; return 0; }
ddd dsad(中間有空格)ddddsad(無空格,直接拼接)| 需求 | 正確寫法 | 錯誤寫法 |
|---|---|---|
| 輸出空格 | cout << " " 或 cout << ' ' | cout << ends |
| 字符串結束標記 | cout << "str" << '\0' | cout << "str" << ends(可移植性差) |
| 刷新緩衝區 | cout << flush 或 cout << endl | cout << ends(不刷新) |
ends = 輸出 '\0',不是空格" " 或 ' 'ends 主要用於 C 風格字符串構造需顯式結束符的場景理解標準庫細節,避免跨平台移植時的隱性 Bug,是 C++ 程序員的基本功。