C++表达式模板

yCa*_*ran 7 c c++ templates expression

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

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

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

sbi*_*sbi 11

简单来说,什么是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; 
  // ..
}
Run Code Online (Sandbox Code Playgroud)

可以一直优化到

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

这更快,但更难理解.

  • @yCalleecharan:表达式模板都是关于编写高级抽象代码并且仍然进行低级优化.C完全不是关于高级抽象代码的,所以在C语言中要求这样做就像在汇编程序中要求这样做一样没有意义.总结一下:如果你想要高级抽象,而不是放弃速度,那就使用C++.如果您只想要速度而不关心抽象,请使用C或FORTRAN.如果你只是想要高级抽象而不关心速度,那就完全使用别的东西吧. (7认同)