在不需要编写模板函数的情况下,引入了Ref<>类来编写以特征对象为参数的函数,而不需要使用不必要的临时器。人们可以读到这个这里。
在进一步搜索internet时,我使用Ref<>类找到了几个不同的参数声明。在本征文档中,他们使用const Eigen::Ref<const Eigen::MatrixXf>&
作为第一个示例中的只读参数。在第二个示例中,为读和写参数引入了Eigen::Ref<Eigen::MatrixXd>
,但在这里,const Eigen::Ref<const Eigen::MatrixXd>
用于只读参数(没有引用)。所以我的问题是:
以下声明与何时使用哪一种声明有什么区别?
const Eigen::Ref<const Eigen::MatrixXd>&
const Eigen::Ref<const Eigen::MatrixXd>
const Eigen::Ref<Eigen::MatrixXd>&
const Eigen::Ref<Eigen::MatrixXd>
Eigen::Ref<const Eigen::MatrixXd>&
Eigen::Ref<const Eigen::MatrixXd>
Eigen::Ref<Eigen::MatrixXd>&
Eigen::Ref<Eigen::MatrixXd>
为了完整起见,我列出了const用法和引用的所有可能组合。
发布于 2014-01-15 13:10:27
通常,使用非const引用(如Ref<T>&
)从来都不是一个好主意,因为只有当调用方手头有一个Ref<T>
对象时,这才能工作。这丢弃了5和7。
案例3和4没有意义,而且它们一般不会编译。
然后,const Ref<const T>
和const Ref<const T>&
之间没有太大的区别,因为函数不太可能是用现有的Ref<const T>
对象调用的,因此在大多数情况下都必须创建Ref<const T>
。尽管如此,我们仍然可以推荐1比2或6。
因此,总之,我们可以推荐Ref<T>
作为可写引用,const Ref<const T>&
推荐用于const引用。
如果您希望通过使用Ref<const T>
调用Ref
构造函数来更改所引用的矩阵(而不是其内容),则选项6 安置新可能仍然很有趣。
https://stackoverflow.com/questions/21132538
复制相似问题