C++ Visual Studio 2017发布版本中的特征cwisemin/cwisemax访问冲突
以下是一些示例代码,在使用Visual Studio 2017的x86发行版时会导致访问冲突:C++ Visual Studio 2017发布版本中的特征cwisemin/cwisemax访问冲突,c++,visual-studio,eigen,visual-studio-2017,C++,Visual Studio,Eigen,Visual Studio 2017,以下是一些示例代码,在使用Visual Studio 2017的x86发行版时会导致访问冲突: #include <Eigen\Core> #include <iostream> int main() { Eigen::Vector3i a(1,1,1); Eigen::Vector3i b(10, 10, 10); std::cout << a.cwiseMin(b) << std::endl; retur
#include <Eigen\Core>
#include <iostream>
int main()
{
Eigen::Vector3i a(1,1,1);
Eigen::Vector3i b(10, 10, 10);
std::cout << a.cwiseMin(b) << std::endl;
return 0;
}
#包括
#包括
int main()
{
本征::向量3a(1,1,1);
本征::向量3ib(10,10,10);
std::cout我看到了相同的结果,除了vs2015 x86发布版本也为第一个值提供了错误的结果。我提出的两个选项是:
关闭优化。属性->C/C++->优化
将a.cwiseMin(b)
的结果存储在第三个变量中:
向量3ic(a.cwiseMin(b));
std::cout我遇到了同样的问题,并且可以用您的示例代码重现该问题。在我的例子中,通过指定EIGEN\u DONT\u VECTORIZE
预处理器定义禁用向量化后,该问题消失了。如果要保持向量化启用,您可能需要检查内存对齐(因为矢量化在启用时具有更强的对齐要求).感谢您的反馈!关闭优化确实有效,但遗憾的是不太可行,因为它会使更繁重的计算变得太慢。虽然您的建议似乎适用于该示例,但如果您将常量值替换为变量Eigen::Vector3i a(i,i,i),则会失败
…如果我用变量替换常量,只要变量被初始化,我就看不出有什么问题。int I=1;Eigen::Vector3i a(I,I,I);