cpl*_*rat 5 c++ eigen eigen3 c++17
我直到最近才开始探索C ++ Eigen库,并对某些文档感到有些困惑。如果有人可以澄清这一点,那就太好了。
在常见的陷阱(https://eigen.tuxfamily.org/dox-devel/TopicPitfalls.html)对齐问题部分中,它说:“的确,自C ++ 17以来,C ++对显式数据对齐没有足够好的支持。 ”。
关于如何消除对齐问题的页面(https://eigen.tuxfamily.org/dox-devel/group__TopicUnalignedArrayAssert.html#getrid),该文档说:“如果您只能将[c ++ 17]定位为最近的编译器(例如,GCC> = 7,clang> = 5,MSVC> = 19.12),那么您很幸运:启用c ++ 17应该就足够了。
那么如果我在gcc> = 7.0的情况下使用c ++ 17,对齐就不是Eigen Matrix的问题吗?我了解这个权利吗?并且不需要宏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?
Run Code Online (Sandbox Code Playgroud)
Q1:正如已经评论过的,这是在为 c++17 更新此段落时的一个拼写错误。这已经是固定的了。
Q2:我不记得这件事的所有细节,但它与两个技术问题有关。
alignas关键字的使用以来,这不再是问题,但也许这在某些奇异的编译器操作系统组合上仍然是一个问题。Q3:没有什么可以阻止 RVO/NRVO,根据我的经验,当它可以应用时,它确实适用。
| 归档时间: |
|
| 查看次数: |
127 次 |
| 最近记录: |