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

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

据我所知,抄写并不是实现一致性的可行方法。std::string在C+11中,但当最近讨论时,我发现自己无法直接支持这一说法。

我是否正确,C+11不承认基于牛的实现std::string?

如果是,这一限制是否在新标准(哪里)中明确声明?

或者,这一限制是否意味着,这是新的要求对std::string,这就排除了基于牛的std::string..在这种情况下,我会对“C+11”的一章和诗句风格的派生感兴趣,因为它实际上禁止基于奶牛的std::string实现。



慕码人2483693
浏览 246回答 3
3回答

PIPIONE

这是不允许的,因为根据标准21.4.1p6,迭代器/引用的无效只允许-作为任何标准库函数的参数,引用非-ConstBasic_String作为参数。-调用非Const成员函数,但运算符[]、在、前面、后面、开始、rBEGIN、End和rend除外。对于牛字符串,调用non-constoperator[]将需要复制(并使引用无效),这是不允许的,以上一段。因此,在C+11中使用牛字符串不再合法。

缥缈止盈

是的,牛是制造更快字符串的一种可接受的机制.但是.。它使多线程代码变得更慢(所有这些锁定来检查您是否是唯一的编写程序,会在使用大量字符串时扼杀性能)。这是牛几年前被杀死的主要原因。其他原因是[]运算符将返回字符串数据,而不需要任何保护来覆盖其他人希望保持不变的字符串。同样适用于c_str()和data().快速谷歌说多线程基本上是因为它实际上是不被允许的(未明确)。建议说:提案我们建议将所有迭代器和元素访问操作安全地并发执行。我们正在提高操作的稳定性,甚至在顺序代码中也是如此。这种更改实际上不允许复制到写入实现。紧随其后在性能上最大的潜在损失,因为一个开关的副本上写实现是增加内存消耗的应用程序,非常大的读-主要是字符串。然而,我们认为对于那些应用程序来说,ROPE是一个更好的技术解决方案,并建议将ROPE建议列入库TR2。绳索是STLPort和SGISSTL的一部分。
打开App,查看更多内容
随时随地看视频慕课网APP