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

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

Susan Sarandon
Susan Sarandon原創
2024-12-25 14:32:11249瀏覽

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

C 11 中COW std::string 實現的合法性

在早期版本的C 中,寫時複製(COW) 是std::string 的可行實施策略。然而,人們對其在 C 11 中的有效性提出了擔憂。本文研究了 C 11 中基於 COW 的 std::string 實現的合法性。

問題: C 11 是否明確禁止基於 COW 的 std::string 實作?

答案: 不,C 11 沒有明確規定禁止基於 COW 的實作。

問題:如果沒有,這個限制是如何隱含的?

答案:此限制源自於 C 11 中有關迭代器和引用失效的新要求。根據標準第 21.4.1 p6 節,僅在特定情況下允許無效:

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

在COW 字串實作中,呼叫非常量運算子[] 將需要複製和引用失效。然而,上述段落禁止這樣做。因此,C 11 中不再允許使用 COW std::string 實作。

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

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