为什么保守调整大小不适用于函数中的 Ref 变量?
Why doesn't conservativeResize work with Ref variable in a function?
我正在制作一个函数,可以扩展给定的矩阵,即MatrixXd类型。我试图使用 conservativeResize 来实现这一点,但是当我在函数语句中使用 Ref 时,conservativeResize 不适用于 Ref 对象,但调整大小可以。我想知道为什么会出现这个问题。提前谢谢。
我尝试直接在函数语句中使用 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
逻辑在任何地方保护它将是一团糟。
相关文章:
- 对RValue对象调用的LValue ref限定成员函数
- 使用带有 ref 参数的成员函数创建线程时出现编译错误
- std::bind 是否实现了 std::ref 和 std::cref 来消除函数调用的歧义?
- 将对象传递给函数而不将其包装到 std::ref 中,而参数被指定为 const 引用
- 为什么添加析构函数(甚至是空的)会破坏我的结构,该结构使用 ref 转发和折叠来保存 ref 或值的副本?
- 为什么保守调整大小不适用于函数中的 Ref 变量?
- 为什么 rval ref 绑定到 lval ref 函数
- 为什么 c++17 的 emplace() 函数不是 ref 限定的?
- 嵌套模板参数以及函数参数的 cv 和 ref- 限定符
- 调用函数,该函数是 std::bind(ed) 与 std::ref 参数
- 对模板化函数中的通用特征矩阵使用 Ref<>
- Typedef 用于指向 cv 和/或 ref 限定成员函数的指针
- 什么是 std::ref 在这个函数中有用
- Ref限定成员函数的目的是什么
- 多次运行 by ref 选择排序函数C++
- 在 C++11 中,是否可以将 ref'ed 基类传递给线程的构造函数并获得多态行为?
- 为什么临时不能作为 ref args 发送到 C++ 中的函数?
- 可以将用于向std::字符串返回const ref的函数更改为通过值break调用代码返回
- 转发成员函数的cv-ref-qualifier
- 为什么stable_sort函数中的ref形参需要const ?