C++ C++;表达式模板

C++ C++;表达式模板,c++,c,templates,expression,C++,C,Templates,Expression,我目前使用C进行数值计算。我听说使用C++表达式模板对于科学计算来说是更好的。什么是C++表达式模板的简单术语? 是否有书围绕使用C++表达式模板讨论数值方法/计算? 在何种方式下,C++表达模板优于纯C? 什么是C++表达式模板的简单术语? 是C++模板元编程的一个类别,它延迟子表达式的评估,直到完全表达式被知道,从而可以应用优化(特别是消除临时变量)。p> P>书中有没有讨论使用C++表达式模板的数值方法/计算?< /P> 我相信ET是由Todd Veldhuizen发明的,他在15年前发

我目前使用C进行数值计算。我听说使用C++表达式模板对于科学计算来说是更好的。什么是C++表达式模板的简单术语? 是否有书围绕使用C++表达式模板讨论数值方法/计算?

在何种方式下,C++表达模板优于纯C?

<>什么是C++表达式模板的简单术语?

是C++模板元编程的一个类别,它延迟子表达式的评估,直到完全表达式被知道,从而可以应用优化(特别是消除临时变量)。p> <> P>书中有没有讨论使用C++表达式模板的数值方法/计算?< /P> 我相信ET是由Todd Veldhuizen发明的,他在15年前发表了一篇关于它的论文。(似乎许多与它有关的旧链接到现在已经消失了,但现在是它的一个版本。)关于它的一些资料在大卫·范德沃德和尼古拉·约瑟蒂斯的著作中

P>以何种方式,C++表达式模板优于使用纯C? 它们允许您以一种富有表现力的高级方式编写代码,而不会损失性能。比如说,

void f(const my_array<double> a1, const my_array<double> a2) 
{ 
  my_array<double> a3 = 1.2 * a1 + a1 * a2; 
  // ..
}
void f(常数my_数组a1,常数my_数组a2)
{ 
my_阵列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]; 

对于(my_array::size_type idx=0;idx添加到sbi的答案中,表达式模板使用模板实现高级模式匹配和合成


他们也允许或让代码更可读,允许你用简单的操作来指定算法。因此,在这种情况下,简单和优雅是通过元编程优化来实现的。至少,如果你做的一切都是正确的。

< P>在旧的Flipcode存档中有一篇关于C++模板数学的好文章。(当然会让人回忆起来):


酷。纯C有这样的功能吗?我几乎不这么认为,因为C没有模板,也没有运算符重载。@YCallecharan:表达式模板都是关于编写高级抽象代码,但仍然得到低级优化。C根本不是关于高级抽象代码,所以要求在C中这样做就没有什么好处在汇编程序中,这是一个要求:如果你想要高抽象度,不要放弃速度,使用C++。如果你只需要速度,不关心抽象,使用C或FORTRAN。如果你只想高抽象度,不关心速度,用其他的完全。谢谢。我会读文章。希望有SOM。类似于纯C的EthTo。为什么你会想要这样的C++?为什么你会如此强烈地避免C++?C是指简单而简单的,没有复杂的思想。通常C是由遗留的约束或平台约束来强制执行的。@ YCaleLeChann不陈述它,但是我猜想其他的计算APPL。在C(C)和C++的混合应用程序中,C.[OT]经常限制C C代码中的C代码,所以它感觉“正确”。如果您仍然对表达式模板的工作感兴趣,EGEN(线性AGEBRA库)对如何实现它们有很好的文档。