我最近才开始探索C++ Eigen库,对一些文档感到困惑。如果有人能澄清一下就太好了。
在常见陷阱(https://eigen.tuxfamily.org/dox-devel/TopicPitfalls.html)的对齐问题部分中,它说:“实际上,自C++17以来,C++对于显式数据对齐的支持不够好。”
在如何消除对齐问题的页面(https://eigen.tuxfamily.org/dox-devel/group__TopicUnalignedArrayAssert.html#getrid)上,文档说:“如果您只能使用较新的编译器(例如,GCC>=7,clang>=5,MSVC>=19.12)来针对[c++17],那么你很幸运:启用c++17应该足够了”。
因此,如果我在使用gcc>=7.0的c++ 17,那么对Eigen矩阵而言,对齐是否不是问题?我的理解正确吗?并且宏EIGEN_MAKE_ALIGNED_OPERATOR_NEW将不再需要吗?如果这是正确的,那么c++14 / c++17之间有什么不同来解决对齐问题?
第二个问题涉及按值传递部分(https://eigen.tuxfamily.org/dox-devel/group__TopicPassingByValue.html)。文档声称按值传递可能是非法的,并且可能会导致程序崩溃。这让我很困惑。按值传递难道不只是调用复制构造函数吗?例如。
Eigen::Vector3f veca = ComputeVecA();
Eigen::Vector3f vecb = veca; //< If pass-by-value is unsafe, is this operation safe?
- 最后,我能否依赖于 RVO/NRVO 来使用 Eigen 固定大小矩阵类?我怀疑答案是肯定的。
c++17
中对齐不是问题。但是我仍然不清楚 (2)。 - cplusplusrat