C++ 特征矩阵常数型

C++ 特征矩阵常数型,c++,types,eigen,C++,Types,Eigen,考虑以下测试 Eigen::MatrixXd B(Eigen::MatrixXd::Random(5,5)); const Eigen::MatrixXd C(Eigen::MatrixXd::Random(5,5)); std::cout << "B " << typeid(B).name() << std::endl; std::cout << "C " << typeid(C).name() << std::endl;

考虑以下测试

Eigen::MatrixXd B(Eigen::MatrixXd::Random(5,5));
const Eigen::MatrixXd C(Eigen::MatrixXd::Random(5,5));
std::cout << "B " << typeid(B).name() << std::endl;
std::cout << "C " << typeid(C).name() << std::endl;
std::cout << " === " << std::endl;
std::cout << "B.T " << typeid(B.transpose()).name() << std::endl;
std::cout << "C.T " << typeid(C.transpose()).name() << std::endl;
要求

B Eigen::Matrix<double, -1, -1, 0, -1, -1>
C Eigen::Matrix<double, -1, -1, 0, -1, -1>
 === 
B.T Eigen::Transpose<Eigen::Matrix<double, -1, -1, 0, -1, -1> >
C.T Eigen::Transpose<Eigen::Matrix<double, -1, -1, 0, -1, -1> const>
B特征::矩阵
C特征::矩阵
=== 
B.T本征::转置
C.T特征::转置

为什么
C
不显示为
const
?艾根是怎么知道的?这是一个固有问题还是这是
typeid

这是由于
typeid
的行为造成的:

§5.2.8/5[expr.typeid]始终忽略glvalue表达式的顶级cv限定符或作为
typeid
操作数的类型id


因此,在这两种情况下,
typeid
只适用于
Eigen::MatrixXd

您能给我们看一下损坏的输出吗?我看不出您能从中得到什么,但为什么不能……知道他们为什么添加了这么奇怪的规则吗?
B Eigen::Matrix<double, -1, -1, 0, -1, -1>
C Eigen::Matrix<double, -1, -1, 0, -1, -1>
 === 
B.T Eigen::Transpose<Eigen::Matrix<double, -1, -1, 0, -1, -1> >
C.T Eigen::Transpose<Eigen::Matrix<double, -1, -1, 0, -1, -1> const>