特征矩阵常数类型

时间:2014-01-22 23:54:29

标签: 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;
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 N5Eigen6MatrixIdLin1ELin1ELi0ELin1ELin1EEE
C N5Eigen6MatrixIdLin1ELin1ELi0ELin1ELin1EEE
 === 
B.T N5Eigen9TransposeINS_6MatrixIdLin1ELin1ELi0ELin1ELin1EEEEE
C.T N5Eigen9TransposeIKNS_6MatrixIdLin1ELin1ELi0ELin1ELin1EEEEE

demangled

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>

为什么C未显示为const? Eigen如何弄清楚它是什么?这是一个特征问题还是typeid

1 个答案:

答案 0 :(得分:1)

这是由于typeid

的行为造成的
  

§5.2.8/ 5 [expr.typeid] glvalue表达式的顶级cv限定符或 type-id 是{的操作数始终忽略{1}}。

因此,在这两种情况下,typeid仅适用于typeid