C++ 为什么';不能在函数中使用Ref变量吗?

C++ 为什么';不能在函数中使用Ref变量吗?,c++,eigen3,C++,Eigen3,我正在做一个函数,可以扩展给定的矩阵,它是MatrixXd类型的。我试图使用conservativeResize来实现这一点,但是当我在function语句中使用Ref时,conservativeResize不能与Ref对象一起使用,但是resize可以。我想知道为什么会发生这个问题。提前谢谢 我试图在函数语句中直接使用MatrixXd&var,它确实有效,但我不知道为什么Ref不能 void mat_extend(参考mat) { int len=mat.rows(); 材料(长度+2,无变化

我正在做一个函数,可以扩展给定的矩阵,它是MatrixXd类型的。我试图使用conservativeResize来实现这一点,但是当我在function语句中使用Ref时,conservativeResize不能与Ref对象一起使用,但是resize可以。我想知道为什么会发生这个问题。提前谢谢

我试图在函数语句中直接使用MatrixXd&var,它确实有效,但我不知道为什么Ref不能

void mat_extend(参考mat)
{
int len=mat.rows();
材料(长度+2,无变化);
}
```

在您的情况下,
mat.resize(len+2,NoChange)
也不起作用。这应该是断言,除非您禁用了断言,否则在这种情况下它不会做任何事情

Ref
不允许调整大小,因为它不“拥有”它指向的内存——例如,它可能指向另一个矩阵的
块,或者指向一些外部分配内存的
映射


之所以允许调用
resize
,是因为在某些通用代码中(包括在Eigen本身内部),矩阵首先调整大小,然后分配值。用一些
isresesized
逻辑来保护任何地方都是一团乱。

在你的情况下
mat.resize(len+2,NoChange)
,也不会起作用。这应该是断言,除非您禁用了断言,否则在这种情况下它不会做任何事情

Ref
不允许调整大小,因为它不“拥有”它指向的内存——例如,它可能指向另一个矩阵的
块,或者指向一些外部分配内存的
映射

之所以允许调用
resize
,是因为在某些通用代码中(包括在Eigen本身内部),矩阵首先调整大小,然后分配值。任何地方的
isresisized
逻辑都会造成混乱