繁体   English   中英

C ++表达式模板

[英]C++ Expression Templates

我目前使用C进行数值计算。 我听说使用C ++ Expression Templates更适合科学计算。 简单来说,什么是C ++表达式模板?

  1. 是否有书籍使用C ++表达模板讨论数值方法/计算?

  2. 以什么方式,C ++表达模板比使用纯C更好?

简单来说,什么是C ++表达式模板?

表达式模板是C ++模板元编程的一种类型,它延迟子表达式的评估,直到已知完整表达式,从而可以应用优化(尤其是消除临时值)。

是否有书籍使用C ++表达模板讨论数值方法/计算?

我相信ET是由Todd Veldhuizen发明的,他在15年前发表了一篇论文。 (似乎许多旧的链接到现在已经死了,但目前这里有一个版本。)有关它的一些材料是David Vandevoorde和Nicolai Josuttis的C ++模板:完整指南

以什么方式,C ++表达模板比使用纯C更好?

它们允许您以富有表现力的高级方式编写代码而不会降低性能。 例如,

void f(const my_array<double> a1, const my_array<double> a2) 
{ 
  my_array<double> a3 = 1.2 * a1 + a1 * a2; 
  // ..
}

可以一直优化到

for( my_array<double>::size_type idx=0; idx<a1.size(); ++idx ) 
  a3[idx] = 1.2*a1[idx] + a1[idx]*a2[idx]; 

这更快,但更难理解。

除了sbi的答案之外,表达式模板还使用模板进行模式匹配和合成来实现高级窥孔优化

它们还允许您根据简单操作指定算法,从而添加语法糖 ,或使您的代码更具可读性。 因此,在这种情况下,通过元编程优化可以实现简单和优雅。 至少,如果你做的一切都正确。

在旧的Flipcode存档中有一篇关于C ++模板数学的好文章(肯定会带来回忆):

http://www.flipcode.com/archives/Faster_Vector_Math_Using_Templates.shtml

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM