C++ 正确访问特征矩阵的一行

C++ 正确访问特征矩阵的一行,c++,matrix,c++14,constants,eigen,C++,Matrix,C++14,Constants,Eigen,从in-Eigen看来,它不是const,因此您无法在const引用上调用此函数,例如const矩阵&xx.row(i)是不允许的 如果我需要一个const方法来获取 x的第i行 您知道为什么行()函数不常量的原因吗 typedef特征::矩阵; void func(常数矩阵和x){ //什么东西 x、 行(i);//错误:对常量对象调用了非常量函数行 //什么东西 } 免责声明:我的问题很明显,对于一个经验丰富的Eigendev,可能需要2秒钟的时间,对此陈词滥调表示歉意。如果你确信答案是显

从in-Eigen看来,它不是
const
,因此您无法在const引用上调用此函数,例如
const矩阵&x
x.row(i)是不允许的

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

您知道为什么
行()函数不常量的原因吗

typedef特征::矩阵;
void func(常数矩阵和x){
//什么东西
x、 行(i);//错误:对常量对象调用了非常量函数行
//什么东西
}
免责声明:我的问题很明显,对于一个经验丰富的
Eigen
dev,可能需要2秒钟的时间,对此陈词滥调表示歉意。如果你确信答案是显而易见的,请随意关闭帖子。我尝试了C++聊天,而没有人知道答案。

< P>你必须使用一个过时的本征版本。下面的代码使用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);
}
#包括
typedef特征::矩阵;
void func(常数矩阵和x){
x、 第(0)行;
}
int main(){
矩阵m=矩阵::随机(2,2);
func(m);
}

顺便说一句,在任何情况下都不要这样做

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

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

您可以像
const_cast(x).row(i)那样做行的常量版本,因为
行始终存在。@ggael据此进行了编辑。
void func(const Matrix& x) {
    const_cast<Matrix&>(x).whatever();
}