gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 04:51:49 26 4
gpt4 key购买 nike

似乎来自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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com