正确访问 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 成员函数。
从 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 成员函数。