亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

OWE STD的合法性:在C+11中的字符串實現

OWE STD的合法性:在C+11中的字符串實現

C++ C
慕尼黑的夜晚無繁華 2019-07-11 20:39:54
OWE STD的合法性:在C+11中的字符串實現據我所知,抄寫并不是實現一致性的可行方法。std::string在C+11中,但當最近討論時,我發現自己無法直接支持這一說法。我是否正確,C+11不承認基于牛的實現std::string?如果是,這一限制是否在新標準(哪里)中明確聲明?或者,這一限制是否意味著,這是新的要求對std::string,這就排除了基于牛的std::string..在這種情況下,我會對“C+11”的一章和詩句風格的派生感興趣,因為它實際上禁止基于奶牛的std::string實現。
查看完整描述

3 回答

?
白豬掌柜的

TA貢獻1893條經驗 獲得超10個贊

這是不允許的,因為根據標準21.4.1p6,迭代器/引用的無效只允許

-作為任何標準庫函數的參數,引用非-ConstBasic_String作為參數。

-調用非Const成員函數,但運算符[]、在、前面、后面、開始、rBEGIN、End和rend除外。

對于牛字符串,調用non-constoperator[]將需要復制(并使引用無效),這是不允許的,以上一段。因此,在C+11中使用牛字符串不再合法。


查看完整回答
反對 回復 2019-07-11
?
MM們

TA貢獻1886條經驗 獲得超2個贊

是的,牛是制造更快字符串的一種可接受的機制.但是.。

它使多線程代碼變得更慢(所有這些鎖定來檢查您是否是唯一的編寫程序,會在使用大量字符串時扼殺性能)。這是牛幾年前被殺死的主要原因。

其他原因是[]運算符將返回字符串數據,而不需要任何保護來覆蓋其他人希望保持不變的字符串。同樣適用于c_str()data().

快速谷歌說多線程基本上是因為它實際上是不被允許的(未明確)。

建議說:

提案

我們建議將所有迭代器和元素訪問操作安全地并發執行。

我們正在提高操作的穩定性,甚至在順序代碼中也是如此。

這種更改實際上不允許復制到寫入實現。

緊隨其后

在性能上最大的潛在損失,因為一個開關的副本上寫實現是增加內存消耗的應用程序,非常大的讀-主要是字符串。然而,我們認為對于那些應用程序來說,ROPE是一個更好的技術解決方案,并建議將ROPE建議列入庫TR2。

繩索是STLPort和SGISSTL的一部分。


查看完整回答
反對 回復 2019-07-11
  • 3 回答
  • 0 關注
  • 458 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號