2014-01-22 167 views
1

考虑以下测试特征矩阵const型

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; 

并且它的输出为何C未示出为const

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> 

? Eigen怎么知道它是?这是一个Eigen问题还是这个typeid

+0

你能向我们展示溃败的输出吗? –

+0

我不明白你能从中得到什么,但为什么不... – yannick

回答

1

这是由于typeid行为:

§5.2.8/ 5 [expr.typeid]的glvalue表达的顶层cv修饰符或型-ID那是typeid的操作数总是被忽略。

所以在这两种情况下,typeid将只适用于Eigen::MatrixXd

+0

任何想法为什么他们添加了这样一个奇怪的规则? – yannick