完整使用该术语的文档,例如
Run Code Online (Sandbox Code Playgroud)Pseudo expression providing partial reduction operations
Run Code Online (Sandbox Code Playgroud)Pseudo expression providing matrix output with given format
但我找不到它的意思。
我相信 Eigen 文档所指的“伪表达式”实际上是“表达式模板”的实例。
表达式模板的使用是 C++ 中的一种常见技术,用于实现诸如数学库或任何域中的真正库,其中期望用户将多个计算连接在一起以构建值。
表达式模板的想法是,它们是一种将计算推迟到实际需要计算的方法,并允许对计算的实际执行方式进行额外程度的控制,例如,您可能不需要为临时可能较大的对象分配内存如果可以在不改变输入参数的情况下逐项执行整个计算。
无论如何,就作为 Eigen 的用户而言,除了一个细节之外,您实际上并不需要了解它对表达式模板的使用。永远不要写这样的代码:
auto to_canonical_coords = get_rotation_matrix(theta) * get_translation_matrix(offset);
Run Code Online (Sandbox Code Playgroud)
问题在于对操作进行类型推导,operator*这里返回一个表达式模板实例。表达式模板实例是短暂的;这样的赋值会将表达式模板实例分配给一个变量,其中它可能比它通过引用引用的对象更长寿或导致其他问题。而是像上面那样写
Eigen::Matrix<double, 3, 3> to_canonical_coords = get_rotation_matrix(theta) * get_translation_matrix(offset);
Run Code Online (Sandbox Code Playgroud)
或使用类型别名的等价物Eigen::Matrix<double, 3, 3>。
Eigen 文档在这里提到了这个问题。此外,我相信 Scott Meyers 在Effective Modern C++ 中的某个地方通常会讨论这个问题。
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |