首頁 >後端開發 >C++ >為什麼有些 C iomanip 操縱器具有黏性,而其他操縱器(如'std::setw()”)則不然?

為什麼有些 C iomanip 操縱器具有黏性,而其他操縱器(如'std::setw()”)則不然?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-22 18:02:15873瀏覽

Why Are Some C   iomanip Manipulators Sticky While Others, Like `std::setw()`, Are Not?

黏性Iomanip 操縱器

在C 中,iomanip 操縱器是流修飾符,用於更改輸入和輸出流的行為或格式。然而,並非所有操縱器的行為方式都相同。有些是臨時的,僅影響下一個插入,而另一些是“粘性”的,在明確更改之前一直有效。

為什麼 std::setw() 不黏性?

與大多數其他操縱器不同,std::setw() 不會永久改變流的狀態。這是因為它被視為格式化操縱器,其中每次插入都需要明確的寬度規格才能正確對齊。預設情況下,每次插入後它都會重設為零,以避免歧義並保持對格式的控制。

黏性操縱器

以下操縱器是黏性的,這意味著它們仍然有效直到被另一個操縱者改變或明確地改變重置:

  • std: :setiosflags
  • std::resetiosflags
  • std::setbase
  • std::setfill
  • std::set precision
  • 全部標誌修改操縱器(例如,std::boolalpha、std::showbase)
  • 所有格式化操縱器(例如,std::fixed、std ::internal)
  • 所有流狀態修飾符(例如,std::ws, std::endl)

std::ios_base::width() 與std::setw()

std::ios_base::width (D. ) 是所有流類型的基底類別std::ios_base 的成員函數。它傳回字段的當前寬度。然而,它並不直接控製字段寬度;必須使用 std::setw() 來設定字段寬度。

線上參考

請參閱 C 標準庫文件以獲取 iomanip 操縱器和的完整列表他們的行為。它提供了其功能的詳細描述和範例。或者,像 cppreference 網站這樣的線上資源提供了有關操縱器的完整信息,包括它們的黏性。

以上是為什麼有些 C iomanip 操縱器具有黏性,而其他操縱器(如'std::setw()”)則不然?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn