我在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]
有趣的是,此问题仅出现在发布模式中。调试模式情况的输出是正确的。
有没有人对此有解释?
谢谢!
答案 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();