4

我正在使用使用Eigen矩阵库的代码。我注意到在整个代码中,有如下访问器:

RowVector3f V(size_t vertex_index) const
{
    return mymatrix.row(vertex_index);
}

使用返回 const ref 的访问器不是更好吗?Eigen有可能吗?或者也许只是将指向内部浮点数的指针返回到行开始并将其转换为向量(当然假设匹配行主要布局)?

4

2 回答 2

4

在 Eigen 中,mymatrix.row(vertex_index) 返回一个块(假设 mymatrix 是一个 Matrix3f)。Block 对象本质上是指向原始数据的指针。在您的情况下,此代理被复制到 RowVector3f 中。幸运的是,对于这么小的固定大小的对象,编译器很容易优化掉这个额外的副本。所以我不会打扰。

在更一般的情况下,我会重写 V 方法以返回 MatrixXf::RowXpr(这是 Block<...> 的正确 typedef)。

于 2012-12-17T13:25:44.003 回答
-1

我不知道这个库,但我确实使用了该技术,即返回对象,并通过值而不是通过引用返回它们。这是出于安全考虑 - 当您按值返回一部分原始数据时,您无法更改原始数据。

此外,使用对象而不是指向数据的指针使代码更加语法友好和高级。

于 2012-12-17T10:35:15.467 回答