我想知道为什么以下代码会生成编译时错误:
void f(const double e) {}
template <typename Derived>
void f(const Eigen::MatrixBase<Derived>& m) {}
int main {
Eigen::Matrix<double, 2, 1> m1;
Eigen::Matrix<double, 2, 1> m2;
m1 << 1.0, 2.0;
m2 << 1.0, 2.0;
f(m1.transpose() * m2); // no error
}
而下一个没有。
$member.children
答案 0 :(得分:4)
这是因为在你的情况下m1.transpose() * m2
是一个允许分配给标量的内积:
double v = m1.transpose() * m2;
这是允许将1x1
矩阵表达式转换为标量的唯一情况。在第二个版本中没有歧义,因为表达式m1.transpose() * m2
的类型继承MatrixBase
。