正确访问 const 一行特征矩阵

Access const correctly a row of an Eigen Matrix

从 Eigen 中的 signiture of the row() function 看来它不是 const 所以你不能在 const 引用上调用这个函数,例如const Matrix& x x.row(i); 是不允许的。

如果我需要一个 const 方法来获取 第 i 行 x?

你知道为什么 row() 函数不是常量吗?

typedef Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> Matrix;

void func(const Matrix& x) {
    // Something something
    x.row(i); // Error: Non-const function row called on const object 
    // Something something
}

免责声明:我的问题很明显,对于有经验的 Eigen 开发者来说可能需要 2 秒,对陈词滥调表示歉意。如果您确信答案显而易见,请随时关闭 post。我在没有人知道答案的情况下尝试了 C++ 聊天。

您使用的一定是过时的 Eigen 的损坏版本。以下代码在 Eigen 3.3 下编译得很好。

#include <Eigen/Core>

typedef Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> Matrix;

void func(const Matrix& x) {
    x.row(0);
}

int main() {
    Matrix m = Matrix::Random(2,2);
    func(m);
}

顺便说一句,在任何情况下都不会

void func(const Matrix& x) {
    const_cast<Matrix&>(x).whatever();
}

这会调用未定义的行为! const_cast 存在的唯一原因是与可能不存在 const 正确性的遗留 C 接口兼容。永远不要放弃 const 特性来调用 const 对象的 const 成员函数。