与特征库和ARM编译器相关的C ++ /模板相关编译器警告(逻辑'和'应用于非布尔常量[-Wlogical-op])

时间:2015-12-04 10:08:55

标签: c++ templates eigen

我使用Eigen代数库并获得数十页(模板疼痛)的编译器警告(见下文)。 只是想在ARM编译器的模板类中使用Eigen。 似乎这些消息与编译器有关(但我并没有真正验证它)。实际上,代码有效但警告让我发疯,因为我不太了解它们。 有人知道问题是什么以及我如何解决这些警告?

我在任何地方都收到这些警告,我使用了Eigen Matrix功能。在这里,我提出了一个产生它们的简单例子:

Eigen::Vector3f v3(2,2,2);
std::cout << "v3 length: " << v3.norm() << std::endl;

这样的警告:

Eigen::Vector3f v3(2,2,2);
std::cout << "v3 length: " << v3.norm() << std::endl;

In file included from /home/dgrat/ardupilot/libraries/AP_Eigen/eigen/Eigen/Core:315:0,
             from /home/dgrat/ardupilot/libraries/AP_Eigen/AP_Eigen.h:25,
             from EigenDemoMini.cpp:6:
/home/dgrat/ardupilot/libraries/AP_Eigen/eigen/Eigen/src/Core/Redux.h: In instantiation of 'struct Eigen::internal::redux_traits<Eigen::internal::scalar_sum_op<float>, Eigen::CwiseUnaryOp<Eigen::internal::scalar_abs2_op<float>, const Eigen::Matrix<float, 3, 1> > >':
/home/dgrat/ardupilot/libraries/AP_Eigen/eigen/Eigen/src/Core/Redux.h:330:34:   required from 'typename Eigen::internal::result_of<BinaryOp(typename Eigen::internal::traits<T>::Scalar)>::type Eigen::DenseBase<Derived>::redux(const Func&) const [with BinaryOp = Eigen::internal::scalar_sum_op<float>; Derived = Eigen::CwiseUnaryOp<Eigen::internal::scalar_abs2_op<float>, const Eigen::Matrix<float, 3, 1> >; typename Eigen::internal::result_of<BinaryOp(typename Eigen::internal::traits<T>::Scalar)>::type = float]'
/home/dgrat/ardupilot/libraries/AP_Eigen/eigen/Eigen/src/Core/Redux.h:363:62:   required from 'typename Eigen::internal::traits<T>::Scalar Eigen::DenseBase<Derived>::sum() const [with Derived = Eigen::CwiseUnaryOp<Eigen::internal::scalar_abs2_op<float>, const Eigen::Matrix<float, 3, 1> >; typename Eigen::internal::traits<T>::Scalar = float]'
/home/dgrat/ardupilot/libraries/AP_Eigen/eigen/Eigen/src/Core/Dot.h:115:48:   required from 'typename Eigen::NumTraits<typename Eigen::internal::traits<T>::Scalar>::Real Eigen::MatrixBase<Derived>::squaredNorm() const [with Derived = Eigen::Matrix<float, 3, 1>; typename Eigen::NumTraits<typename Eigen::internal::traits<T>::Scalar>::Real = float]'
/home/dgrat/ardupilot/libraries/AP_Eigen/eigen/Eigen/src/Core/Dot.h:128:27:   required from 'typename Eigen::NumTraits<typename Eigen::internal::traits<T>::Scalar>::Real Eigen::MatrixBase<Derived>::norm() const [with Derived = Eigen::Matrix<float, 3, 1>; typename Eigen::NumTraits<typename Eigen::internal::traits<T>::Scalar>::Real = float]'
EigenDemoMini.cpp:16:43:   required from here
/home/dgrat/ardupilot/libraries/AP_Eigen/eigen/Eigen/src/Core/Redux.h:40:41: warning: logical 'and' applied to non-boolean constant [-Wlogical-op]
 MayLinearVectorize = MightVectorize && (int(Derived::Flags)&LinearAccessBit),
                                     ^
Building /tmp/EigenDemoMini.build/EigenDemoMini.elf

1 个答案:

答案 0 :(得分:0)

编译器发现可疑的是&amp;&amp;应用于bool和似乎是一个int右操作数。 它似乎与您的代码无关,而仅仅与您对特定编译器和编译器版本没有警告的Eigen库的实现有关。 您可以使用选项-Wno-logical-op。

删除此警告

-Wno-logical-op :禁用警告表达式中可疑使用逻辑运算符的警告。这包括在可能需要逐位运算符的上下文中使用逻辑运算符