使用带有Eigen :: Array对象的auto说明符时的奇怪结果

时间:2016-11-28 11:48:33

标签: c++ eigen

我在Windows机器上使用Eigen lib,版本3.2.7。

当我运行以下代码时,我得到了奇怪的结果:

auto a = Eigen::Array4i{ 95,95,95,95 }-Eigen::Array4i{ 0,1,0,1 };
Eigen::Array4i b = Eigen::Array4i{ 95,95,95,95 }-Eigen::Array4i{ 0,1,0,1 };
std::cout << a;
std::cout << b;

而不是两次打印相同的矢量,我得到以下结果:

[0; 0; 0; 0][95; 94; 95; 94]

有趣的是,此问题仅出现在发布模式中。调试模式情况的输出是正确的。

有没有人对此有解释?

谢谢!

1 个答案:

答案 0 :(得分:1)

auto a = Eigen::Array4i{ 95,95,95,95 }-Eigen::Array4i{ 0,1,0,1 };

a是表达式类型。临时Eigen::Array4i{ 95,95,95,95 }-Eigen::Array4i{ 0,1,0,1 }&#34;死亡&#34;在发布模式下该行之后(已发布),但在Debug中继续存在一段时间。您可以使用.eval()

强制评估表达式
auto c = (Eigen::Array4i{ 95,95,95,95 }-Eigen::Array4i{ 0,1,0,1 }).eval();