c++ - 正确访问 const 一行特征矩阵

标签 c++ matrix c++14 constants eigen

似乎来自signiture of the row() function在 Eigen 中它不是 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 秒,对陈词滥调表示歉意。如果您确信答案显而易见,请随时关闭帖子。我在没有人知道答案的情况下尝试了 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 接口(interface)兼容。永远不要放弃常量性来调用常量对象的常量成员函数。

关于c++ - 正确访问 const 一行特征矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48052893/

相关文章:

c++ - 基类 C++14 模板函数在 Mac OS 上的 clang 中不可见(递归模板)

c++ - 即使类不包含数据,C++ 14 是否仍会生成默认函数?

c++ - 如何获取 lambda 的返回类型,C++11 中的 reduce 函数

c++ - 将三位值存储到 unsigned char 数组

c++ - 如何重载不接受或不返回 ostream 的运算符 <<

c++ - 有没有办法在opencv c++中检查矩阵中的数据

c++ - c++14 std::experimental::filesystem::v1 和 c++17 std::filesystem 之间的区别?

c++ - 尝试解密 2 key 三重 DES 的无效 block 填充

c++ - 矩阵连续n个数的最大乘积

c++ - 交换内部和外部 vector