是否存在与字符串的blitz ++库相当的(即通过延迟字符串构建直到读取整个表达式来提高字符串构造/操作性能的库)?
Blitz ++通过模板元编程提高矩阵/向量操作的速度,在编译时从A + B + C
等表达式构建“语法树”,然后评估语法树。例如,这种方法可以提高字符串连接的性能,因为在看到类似s1 + s2 + s3
的表达式之后,结果的大小将是已知的,这样内存分配和复制就可以在一个步骤中完成,而不是先为s1 + s2
分配内存,复制,为(s1 + s2) + s3
分配内存,然后再次复制。
答案 0 :(得分:1)
我知道QString
使用表达式模板来确定最终字符串的大小,并事先有效地分配它。我认为底层代码并不那么难,并且可以与大多数现有的字符串类一起使用。从Qt 4.8手册:
QStringBuilder
使用表达式模板并重新实现'%'
运算符,这样当您使用'%'
进行字符串连接而不是'+'
时,多个子字符串连接将被推迟到最终结果即将分配给QString
。此时,已知最终结果所需的存储量。然后调用内存分配器一次以获得所需的空间,并将子字符串逐个复制到其中。
请查看wiki on the subject以获取有关该技术的示例。
请注意,这确实会干扰使用表达式模板decltype(a+b)
的{{1}}或auto c = a+b
之类的内容,因为返回的类型是代理类型,而不是原始类型{ {1}}或operator+
。