首頁 >後端開發 >C++ >`std::string` 的寫時複製實作在 C 11 中合法嗎?

`std::string` 的寫時複製實作在 C 11 中合法嗎?

Patricia Arquette
Patricia Arquette原創
2024-12-15 03:28:08816瀏覽

Is a Copy-on-Write Implementation of `std::string` Legal in C  11?

C 11 中std::string 的COW 實作:合法性與限制

寫時複製(COW) 是一種常見的技術用於透過推遲創建新物件的成本直到實際修改該物件來提高效能。然而,有人質疑 COW 是否是在 C 11 中實作 std::string 的有效方法。

對COW 實現的限制

根據C 11 標準(21.4.1 p6),迭代器和引用的無效僅在特定情況下允許情況:

  • 當作為參數傳遞給引用非常量basic_string 的標準函式庫函數時。
  • 呼叫非常量成員函數時,不包括operator[], at、front、back、begin、rbegin、end 和 rend。

對於 COW 字串實現,呼叫非常量運算子[] 需要製作副本並使引用無效。這是上述段落所禁止的。因此,基於 COW 實作 std::string 在 C 11 中不再被視為合法。

明確限制聲明

標準沒有明確聲明禁止基於 COW 的 std::string 實作。但是,明確限制失效場景的要求組合隱含了這個限制。

結論

雖然COW 在早期版本中是std::string 的可行實現C 中,C 11 規範引入了約束,由於不允許引用失效,因此禁止基於COW 的實作。

以上是`std::string` 的寫時複製實作在 C 11 中合法嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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