为了账号安全,请及时绑定邮箱和手机立即绑定

请问 OWE STD的合法性:在C+11中的字符串实现

请问 OWE STD的合法性:在C+11中的字符串实现

C++
慕码人2483693 2019-08-03 07:03:27
OWE STD的合法性:在C+11中的字符串实现据我所知,抄写并不是实现一致性的可行方法。std::string在C+11中,但当最近讨论时,我发现自己无法直接支持这一说法。我是否正确,C+11不承认基于牛的实现std::string?如果是,这一限制是否在新标准(哪里)中明确声明?或者,这一限制是否意味着,这是新的要求对std::string,这就排除了基于牛的std::string..在这种情况下,我会对“C+11”的一章和诗句风格的派生感兴趣,因为它实际上禁止基于奶牛的std::string实现。
查看完整描述

3 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

这是不允许的,因为根据标准21.4.1p6,迭代器/引用的无效只允许

-作为任何标准库函数的参数,引用非-ConstBasic_String作为参数。

-调用非Const成员函数,但运算符[]、在、前面、后面、开始、rBEGIN、End和rend除外。

对于牛字符串,调用non-constoperator[]将需要复制(并使引用无效),这是不允许的,以上一段。因此,在C+11中使用牛字符串不再合法。


查看完整回答
反对 回复 2019-08-04
?
缥缈止盈

TA贡献2041条经验 获得超4个赞


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

它使多线程代码变得更慢(所有这些锁定来检查您是否是唯一的编写程序,会在使用大量字符串时扼杀性能)。这是牛几年前被杀死的主要原因。

其他原因是[]运算符将返回字符串数据,而不需要任何保护来覆盖其他人希望保持不变的字符串。同样适用于c_str()data().

快速谷歌说多线程基本上是因为它实际上是不被允许的(未明确)。

建议说:

提案

我们建议将所有迭代器和元素访问操作安全地并发执行。

我们正在提高操作的稳定性,甚至在顺序代码中也是如此。

这种更改实际上不允许复制到写入实现。

紧随其后

在性能上最大的潜在损失,因为一个开关的副本上写实现是增加内存消耗的应用程序,非常大的读-主要是字符串。然而,我们认为对于那些应用程序来说,ROPE是一个更好的技术解决方案,并建议将ROPE建议列入库TR2。

绳索是STLPort和SGISSTL的一部分。




查看完整回答
反对 回复 2019-08-04
  • 3 回答
  • 0 关注
  • 245 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信