加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 07:02:07 所属栏目:百科 来源:网络整理
导读:是否有一个等效于字符串的闪电战库(即通过延迟字符串构建直到读取整个表达式来提高字符串构造/操作性能的库)? Blitz通过模板元编程提高矩阵/向量操作的速度,在编译时从A B C等表达式构建“语法树”,然后评估语法树.例如,这种方法可以提高字符串连接的性能,
是否有一个等效于字符串的闪电战库(即通过延迟字符串构建直到读取整个表达式来提高字符串构造/操作性能的库)?

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的原始类型.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读