c-使用本征和三元运算符的意外/意外编译器魔术

以下代码意外地分配了(0,-1,0)而不是预期的(0,1,0).为什么?有任何想法吗?

#include <Eigen/Dense>

int main()
{
  const bool useFirst = false;

  // This is the original use-case.
  const Eigen::Vector3d vect1
    = useFirst ? -Eigen::Vector3d::UnitZ() : Eigen::Vector3d::UnitY();

  // This version is somewhat simplified, but exhibits the same problem.
  const Eigen::Vector3d unitZ(0.0, 0.0, 1.0), unitY(0.0, 1.0, 0.0);
  const Eigen::Vector3d vect2 = useFirst ? -unitZ : unitY;

  // FYI, this version does not compile (?).
  // const Eigen::Vector3d vect3
  //   = useFirst ? -unitZ : Eigen::Vector3d::UnitY();
}
最佳答案
如果unitZ是Vector3d,则发生的情况是-unitZ返回表达式模板const CwiseUnaryOp <内部:: scalar_opposite_op
typedef Eigen::Vector3d Vec3d;
const Vec3d vect1 = useFirst ? Vec3d(-Vec3d::UnitZ()) : Vec3d(Vec3d::UnitY());

相关问题:Type error in ternary operator in Eigen

转载注明原文:c-使用本征和三元运算符的意外/意外编译器魔术 - 代码日志