结合 Eigen 的 .transpose() 和其他操作

Combining Eigen's .transpose() and other operations

我正在阅读 libigl's documentation, when I opened their MATLAB to libigl+Eigen conversion table。那里(第 17 行,或第一个红色行),它是:

Do not attempt to combine .transpose() in expression like this:

C = A + B.transpose();

相反,他们这样做:

SparseMatrixType BT = B.transpose();
SparseMatrixType C = A+BT;

这是为什么?我在 Eigen 的文档中找不到任何相关信息。

在我的代码中我有类似的东西:

class Point {
public:
    Point() : rot_matrix(Eigen::Matrix3d::Identity()), cm_set(Eigen::Vector3d::Zero()) {}
    const Eigen::Matrix3d & rot_matrix() const { return rot_matrix; }
    const Eigen::Matrix3d & cm_set() const { return cm_set; }
private:
    Eigen::Matrix3d rot_matrix;
    Eigen::Vector3d cm_set;
};


auto other = Point();
const Vector3d point = other.rot_matrix().transpose()*other_cm + other.cm_set();

这会导致程序错误吗?

根据 Eigen 文档,transpose() 的唯一限制是

m = m.transpose();

因此

MatrixType res = A + B.transpose();

合法