【发布时间】:2020-04-19 23:10:17
【问题描述】:
考虑这个简单的函数(一种伪代码):
template <typename Derived>
void f (const MatrixBase<Derived>& input1,
const MatrixBase<Derived>& input2,
const MatrixBase<Derived>& input3,
Vec6& output)
{
part1(output) = <an expr using the three inputs>;
part2(output) = <another expr using the three inputs>;
}
其中part1 和part2 是分别选择output 的前3 行和后3 行的块表达式。我知道output总是一个有6个系数的列向量。
我想避免传递 output 参数。但我也想避免返回明确的Vec6,以避免临时副本。
因此,我想返回其中一个神奇的特征表达式对象,它只存储对输入的引用,并且仅在需要时才实际进行计算。
我的问题:
-
值得吗?鉴于它是一个“小”的 6 维向量(例如,文档说使用小的 3 维向量,编译器通常能够优化掉临时变量,因此没有太多避免它们的意义)
我可以使用自定义函子和
CWiseNullaryOp实现我的返回表达式类型,还是真的需要自定义表达式类型?
谢谢
编辑:所以我们确定临时对象已被优化(参见 cmets);这回答了问题 1,并使问题 2 不相关。
但是,为了好奇和更多地了解 Eigen,是否有人对我的函数的可行表达式类型有一些提示? (假设值得设计一个)
【问题讨论】: