我正在尝试在 lambda 中使用此函数的主体:
Vector3d fun(Vector3d const& point) {
Vector3d const b{ 0., 0., 30. };
return b + point.normalized();
}
但是当返回之前未明确评估结果时,可以使用
return (b + point.normalized()).eval();
或
Vector3d ret = b + point.normalized();
return ret;
对于类似 lambda 的结果是错误的
auto lamb = [](Vector3d const& point) {
Vector3d const b{ 0., 0., 30. };
return b + point.normalized();
};
我不明白为什么。
文档指出,按值返回对象是可以的,我不确定是否以及如何应用此处提到的内容。
我试图理解为什么在这个示例主体中,lambda 在返回之前需要显式 eval,但普通的自由函数不需要。
Eigen 大量使用表达式模板来提高速度和效率。简而言之:算术运算符的返回类型不是算术运算的结果,而只是一些仅在需要时计算结果的句柄。这是更大的图景,老实说,我不明白具体发生了什么,但明确强制 Eigen 计算
Vector3d
可以解决您的问题:
auto lamb = [](Vector3d const& point) -> Vector3d {
Vector3d const b{ 0., 0., 30. };
return b + point.normalized();
//Vector3d ret = b + point.normalized(); return ret;
};