字符串的模板库提供有效的串联

Template library for string providing efficient concatenation

本文关键字:有效 字符串      更新时间:2023-10-16

是否有等同于闪电战 库的字符串(即,通过延迟字符串构建来提高字符串构建/操纵性能的库,直到读取整个表达式?

Blitz 通过模板元编程提高了矩阵/向量操作的速度,在编译时间中从A + B + C之类的表达式构造"语法树",然后评估语法树。例如,此方法可以改善字符串串联的性能,因为在看到像s1 + s2 + s3这样的表达式之后,结果的大小将是已知的,因此,可以在一步中进行内存分配和复制,而不是首先分配s1 + s2的内存,复制,为(s1 + s2) + s3分配内存,然后再次复制。

我知道QString使用表达模板来确定最终字符串的大小并有效地提前分配此字符串。我认为基本代码并不难,并且可以与大多数现有的字符串类一起工作。从QT 4.8手册中:

QStringBuilder使用表达模板并重新实现'%'操作员,因此当您使用'%'进行字符串串联而不是'+'时,将推迟多个衬字串联,直到将最终结果分配给QString为止。此时,已知最终结果所需的内存量。然后调用内存分配器一次以获取所需的空间,并将子字节复制到其中。

请看一下该主题的Wiki,以了解该技术的示例。

请注意,这确实会干扰使用decltype(a+b)auto c = a+b的内容,其中使用了表达模板operator+,因为返回的类型是代理类型,而不是a或CC_14的原始类型。