c – 用于提供高效串联的字符串的模板库

c – 用于提供高效串联的字符串的模板库,第1张

概述是否有一个等效于字符串的闪电战库(即通过延迟字符串构建直到读取整个表达式来提高字符串构造/ *** 作性能的库)? Blitz通过模板元编程提高矩阵/向量 *** 作的速度,在编译时从A B C等表达式构建“语法树”,然后评估语法树.例如,这种方法可以提高字符串连接的性能,因为在看到类似s1 s2 s3的表达式之后,结果的大小将是已知的,这样内存分配和复制可以在一个步骤中完成,而不是首先为s1 s2分配内存,复制 是否有一个等效于字符串的闪电战库(即通过延迟字符串构建直到读取整个表达式来提高字符串构造/ *** 作性能的库)?

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

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

QStringBuilder uses Expression templates and reimplements the '%' operator so that when you use '%' for string concatenation instead of '+',multiple substring concatenations will be postponed until the final result is about to be assigned to a QString. At this point,the amount of memory required for the final result is kNown. The memory allocator is then called once to get the required space,and the substrings are copIEd into it one by one.

看一下wiki on the subject的技术示例.

请注意,这确实会干扰像decltype(a b)或auto c = a b这样的东西,其中使用表达式模板运算符,因为返回的类型是代理类型,而不是a或b的原始类型.

总结

以上是内存溢出为你收集整理的c – 用于提供高效串联的字符串的模板库全部内容,希望文章能够帮你解决c – 用于提供高效串联的字符串的模板库所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1226274.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存