具有动态大小的特征矩阵的默认初始状态

The default initial state of Eigen matrices with dynamic size

默认构造函数 Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> 使矩阵处于什么状态?是0x0矩阵吗?

特别是,如果声明了一个变量 Eigen::MatrixXd A;,我以后如何测试是否已将某些内容分配给 A?用A.size()==0,还是有什么特殊的测试?

来自documentation

A default constructor is always available, never performs any dynamic memory allocation, and never initializes the matrix coefficients.

请注意,使用默认构造函数时,动态矩阵也不会分配其大小。所以,

Eigen::MatrixXd a;

是一个0x0矩阵,而

Eigen::MatrixXd b(10, 10);

是一个10x10矩阵,系数未初始化;

是的,您可以检查矩阵是否仍然 0x0 以验证是否已将某些内容分配给它。

请注意,如果大小不是动态的,它将有定义的行数 and/or 列,这将使我们更难知道是否已为其分配了某些内容:您应该初始化值然后检查它们是否已更改。

"In particular, if a variable is declared Eigen::MatrixXd A;, how could I later test whether something has been assigned to A?"

与相同的默认构造比较

if (A != Eigen::MatrixXd{})
    // ...