gpt4 book ai didi

c++ - 为什么 conservativeResize 不能与函数中的 Ref 变量一起使用?

转载 作者:太空宇宙 更新时间:2023-11-04 12:34:34 25 4
gpt4 key购买 nike

我正在制作一个可以扩展给定 Matrix 类型 Matrix 的函数。我试图使用 conservativeResize 来实现这一点,但是当我在函数语句中使用 Ref 时,conservativeResize 不适用于 Ref 对象,但 resize 可以。我想知道为什么会出现这个问题。提前致谢。

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

void mat_extend(Ref<MatrixXd> mat)
{
int len = mat.rows();
mat.conservativeResize(len+2,NoChange);
}
```

最佳答案

在您的情况下 mat.resize(len+2,NoChange) 也不起作用。这应该断言,除非您禁用断言,在这种情况下它什么都不做。

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

允许调用 resize 的原因是,在某些通用代码(包括 Eigen 本身内部)中,矩阵首先调整大小,然后赋值。在任何地方通过一些 isResizeable 逻辑来保护它会是一团糟。

关于c++ - 为什么 conservativeResize 不能与函数中的 Ref 变量一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56980246/

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