4

是否有等效于字符串的 blitz++ 库(即,通过延迟字符串构建直到读取整个表达式来提高字符串构造/操作性能的库)?

Blitz++ 通过模板元编程提高矩阵/向量运算的速度,在编译时从表达式构建“语法树”,A + B + C然后评估语法树。例如,这种方法可以提高字符串连接的性能,因为在看到类似的表达式之后s1 + s2 + s3,结果的大小将是已知的,这样就可以一步完成内存分配和复制,而不是先分配内存for s1 + s2,复制,为 分配内存(s1 + s2) + s3,然后再次复制。

4

1 回答 1

1

我知道QString使用表达式模板来确定最终字符串的大小并预先有效地分配它。我认为底层代码并不难,并且可以与大多数现有的字符串类一起使用。来自 Qt 4.8 手册:

QStringBuilder使用表达式模板并重新实现'%'运算符,以便当您使用'%'for 字符串连接而不是 时'+',多个子字符串连接将被推迟,直到最终结果即将分配给 a QString。此时,最终结果所需的内存量是已知的。然后调用内存分配器一次以获得所需的空间,并将子字符串一一复制到其中。

查看有关该主题的 wiki 以获取有关该技术的示例。

请注意,这确实会干扰诸如decltype(a+b)auto c = a+b使用表达式模板之类的东西operator+,因为返回的类型是代理类型,而不是aor的原始类型b

于 2012-11-11T17:43:24.490 回答