Eigen如何防止生成临时对象?

时间:2016-06-02 09:54:17

标签: c++ eigen

在标题why its interesting下的特征文档中,有一个例子提到了特征是如何工作的。例子是

#include<Eigen/Core>
int main()
{
  int size = 50;
  // VectorXf is a vector of floats, with dynamic size.
  Eigen::VectorXf u(size), v(size), w(size);
  u = v + w;
}

在文档中说,通常由于C ++的设计架构,上述操作将使用临时操作完成。

VectorXf tmp = v + w;
VectorXf u = tmp;
for(int i = 0; i < size; i++) tmp[i] = v[i] + w[i];
for(int i = 0; i < size; i++) u[i] = tmp[i];

正如我们所看到的,由于临时对象,我们还需要一个循环。但是,特征是通过不生成此临时对象来防止生成此额外循环。因此,只需一个循环即可完成此操作。

for(int i = 0; i < size; i++) u[i] = v[i] + w[i];

虽然他们解释了这个矩阵总和如何工作但我无法理解。如果有人能用简单的话来解释它会很好。

1 个答案:

答案 0 :(得分:0)

Eigen内部表达模板的实际实现非常复杂,因此描述不会被淹没&#34;许多。如果您只对表达式模板的概念感兴趣,请查看corresponding wikipedia article。 如果您对更多细节感兴趣,请阅读参考链接/书籍。