从我读到的Eigen( 这里 )看来, operator=()似乎是懒惰评估的“障碍” – 例如它会导致Eigen停止返回expression式模板并实际执行(优化的)计算,将结果存储在=的左侧。 这似乎意味着一个人的“编码风格”对性能有影响 – 即使用命名variables来存储中间计算结果可能会对性能产生负面影响,因为计算的某些部分“过早” 。 为了validation我的直觉,我写了一个例子,并对结果感到惊讶( 完整的代码在这里 ): using ArrayXf = Eigen::Array <float, Eigen::Dynamic, Eigen::Dynamic>; using ArrayXcf = Eigen::Array <std::complex<float>, Eigen::Dynamic, Eigen::Dynamic>; float test1( const MatrixXcf & mat ) { ArrayXcf arr = mat.array(); ArrayXcf conj = arr.conjugate(); ArrayXcf magc = arr * conj; ArrayXf mag = magc.real(); return mag.sum(); […]